我想找到neo4j中的最短路径。
我的节点有x
和y
坐标,我的关系有distance
的属性。
A*
程序可以很好地找到最短路径。
但我还需要能够阻止某些节点或选择必须位于结果路径中的节点(TSP
的种类)。
我的同事和我觉得Graphdatabase应该能够从头开始解决这类问题。
必须有节点的数量不会那么高(prly 1-5)。我已经尝试自己解决这个问题,但我认为这是一个非常受欢迎的事情,应该是neo4j的一部分。
PS:我已经设法编写自己的estimateEvaluator
来过滤掉块节点。我仍然坚持TSP
。我想创建一个包含起始节点和结束节点的附加图形,并且所有节点都必须具有节点以及彼此之间的所有距离(笛卡儿积+ A*
)。之后我会尝试找到哈密尔顿路径。
PS2:
这是一张图。我只有NODE
作为nodetype。所有节点都可能是start,end,block或必须有节点。
CREATE (n:NODE{NODE_ELID:'START',COORD_X:0,COORD_Y:0})
CREATE (m1:NODE{NODE_ELID:'MID1',COORD_X:1,COORD_Y:1})
CREATE (m2:NODE{NODE_ELID:'MID2',COORD_X:3,COORD_Y:1})
CREATE (m3:NODE{NODE_ELID:'MID3',COORD_X:1,COORD_Y:2})
CREATE (m4:NODE{NODE_ELID:'MID4',COORD_X:2,COORD_Y:2})
CREATE (m5:NODE{NODE_ELID:'MID5',COORD_X:3,COORD_Y:2})
CREATE (m6:NODE{NODE_ELID:'MID6',COORD_X:1,COORD_Y:3})
CREATE (m7:NODE{NODE_ELID:'MID7',COORD_X:3,COORD_Y:3})
CREATE (m8:NODE{NODE_ELID:'MID8',COORD_X:4,COORD_Y:3})
CREATE (m9:NODE{NODE_ELID:'MID9',COORD_X:5,COORD_Y:3})
CREATE (m10:NODE{NODE_ELID:'MID10',COORD_X:5,COORD_Y:4})
CREATE (m11:NODE{NODE_ELID:'MID11',COORD_X:3,COORD_Y:5})
CREATE (m12:NODE{NODE_ELID:'MID12',COORD_X:4,COORD_Y:5})
CREATE (m13:NODE{NODE_ELID:'MID13',COORD_X:3,COORD_Y:6})
CREATE (m14:NODE{NODE_ELID:'MID14',COORD_X:3,COORD_Y:7})
CREATE (m15:NODE{NODE_ELID:'MID15',COORD_X:5,COORD_Y:7})
CREATE (m16:NODE{NODE_ELID:'MID16',COORD_X:3,COORD_Y:8})
CREATE (m17:NODE{NODE_ELID:'MID17',COORD_X:4,COORD_Y:8})
CREATE (n1:NODE{NODE_ELID:'END',COORD_X:6,COORD_Y:6})
CREATE (mu1:NODE{NODE_ELID:'MUST1',COORD_X:2,COORD_Y:1})
CREATE (mu2:NODE{NODE_ELID:'MUST2',COORD_X:2,COORD_Y:4})
CREATE (b1:NODE{NODE_ELID:'BLOCK1',COORD_X:2,COORD_Y:3})
CREATE (b2:NODE{NODE_ELID:'BLOCK2',COORD_X:4,COORD_Y:7})
CREATE (n)-[r1:CONNECTED_TO{DISTANCE:1.4}]->(m1)
CREATE (m1)-[r2:CONNECTED_TO{DISTANCE:1}]->(mu1)
CREATE (m1)-[r3:CONNECTED_TO{DISTANCE:1}]->(m3)
CREATE (m3)-[r4:CONNECTED_TO{DISTANCE:1}]->(m6)
CREATE (mu1)-[r5:CONNECTED_TO{DISTANCE:1}]->(m4)
CREATE (mu1)-[r6:CONNECTED_TO{DISTANCE:1}]->(m2)
CREATE (m4)-[r7:CONNECTED_TO{DISTANCE:1.4}]->(m7)
CREATE (m4)-[r8:CONNECTED_TO{DISTANCE:1}]->(b1)
CREATE (m7)-[r9:CONNECTED_TO{DISTANCE:1.4}]->(mu2)
CREATE (b1)-[r10:CONNECTED_TO{DISTANCE:1}]->(mu2)
CREATE (m6)-[r11:CONNECTED_TO{DISTANCE:1.4}]->(mu2)
CREATE (mu1)-[r12:CONNECTED_TO{DISTANCE:1.4}]->(m5)
CREATE (m2)-[r13:CONNECTED_TO{DISTANCE:1}]->(m5)
CREATE (m5)-[r14:CONNECTED_TO{DISTANCE:1.4}]->(m8)
CREATE (m8)-[r15:CONNECTED_TO{DISTANCE:1}]->(m9)
CREATE (m9)-[r16:CONNECTED_TO{DISTANCE:1}]->(m10)
CREATE (m10)-[r17:CONNECTED_TO{DISTANCE:1.4}]->(m12)
CREATE (m12)-[r18:CONNECTED_TO{DISTANCE:1.4}]->(m13)
CREATE (mu2)-[r19:CONNECTED_TO{DISTANCE:1.4}]->(m11)
CREATE (m11)-[r20:CONNECTED_TO{DISTANCE:1}]->(m13)
CREATE (m13)-[r21:CONNECTED_TO{DISTANCE:1}]->(m14)
CREATE (m14)-[r22:CONNECTED_TO{DISTANCE:1}]->(m16)
CREATE (m16)-[r23:CONNECTED_TO{DISTANCE:1}]->(m17)
CREATE (m17)-[r24:CONNECTED_TO{DISTANCE:1.4}]->(m15)
CREATE (m15)-[r25:CONNECTED_TO{DISTANCE:1.4}]->(n1)
CREATE (m13)-[r26:CONNECTED_TO{DISTANCE:1.4}]->(b2)
CREATE (b2)-[r27:CONNECTED_TO{DISTANCE:1}]->(m15)
CREATE (b2)-[r28:CONNECTED_TO{DISTANCE:1}]->(m17)
研究时我是否遗漏了什么?如何正确解决这个问题?