0
我在neo4j中有一個圖表,其中一個節點代表一個城市,一條關係代表連接城市的道路。這些關係是加權的,並且有一個稱爲「距離」的屬性。 我想找到兩個城市A和B之間最短的(最小加權的路徑)。這很容易使用Dijkstra算法完成。棘手的部分是我有一組城市,這些城市將被覆蓋在從A到B的路徑中。換句話說,從A到B的路徑應該覆蓋所有的路標,順序無關緊要。 就像在Google API中提供路線點的來源,目的地和列表並優化:true一樣。 我曾嘗試使用這種Cypher支架與下面的查詢 -neo4j中通過航點的2個節點之間的最短路徑
match(s:City{ID:"A"})
match(f:City{ID:"B"})
match (n:City) where n.name in ['City1','City2','City3','City4']
with collect(n) as wps
match path=allshortestPaths((s)-[:ROADWAY*..9]->(f))
where ALL (n in wps WHERE n in nodes(path)) with path,
reduce(d=0, rel IN relationships(path)| d+rel.displacement) as
totaldistance,Extract (n in nodes(path)| n.name) as cities
return cities, totaldistance, tofloat(totaldistance) as TD order by
totaldistance
但這並沒有工作。也許是因爲路徑沒有通過所有的路標。 我也試圖使用A *或Dijkstra(使用Neo4j遍歷),但不知道如何訪問所有的路標。
在此先感謝!
我想要的路徑應該包含所有的點在列表中。我認爲「任何」不會解決它。 – mayankgupta565
@ mayankgupta565修改我的答案以確保包含所有路標 –