具有默认权重的拓扑图上的最短路径

问题描述 投票:0回答:1

使用neo4j(使用APOC 5.7),我试图在拓扑图上找到最短路径(节点上没有位置),其中每个步骤的权重默认为1。我不想限制路径的步骤数,只想限制关系类型。

文档非常扁平:

apoc.algo.dijkstra
需要重视关系

apoc.algo.dijkstraWithDefaultWeight
投掷:
There is no procedure with the name apoc.algo.dijkstraWithDefaultWeight

apoc.algo.aStar
apoc.algo.aStarWithPoint
需要点位置或
lat
long

apoc.algo.allSimplePaths
需要
maxNodes
并且是全图搜索...

例如,对于图表:

CREATE (b:City {name:'Berlin'})
CREATE (m:City {name:'München'})
CREATE (f:City {name:'Frankfurt'})
CREATE (h:City {name:'Hamburg'})
MERGE (b)-[:DIRECT]-(h)
MERGE (b)-[:DIRECT]-(m)
MERGE (b)-[:DIRECT]-(f)
MERGE (f)-[:DIRECT]-(m)
MERGE (f)-[:DIRECT]-(h)

我想要得到类似的东西:

╒════════╤══════════════════════════════════════════════════════════════════════╕
│weight  │path                                                                  │
╞════════╪══════════════════════════════════════════════════════════════════════╡
│2.0     │(:City {name: "München"})<-[:DIRECT]-(:City {name: "Frankfurt"})-     |
│        │[:DIRECT]->(:City {name: "Hamburg"})                                  │       
└────────┴──────────────────────────────────────────────────────────────────────┘

目前,我看到的最简单的选择是使用

apoc.algo.dijkstra
并在每个关系上添加一个值为
weight
1
属性 - 这是荒谬的。

有什么建议吗?

neo4j neo4j-apoc
1个回答
0
投票

如果你不关心重量,你可能根本不需要使用 APOC,而是使用内置的 Cypher ShortestPath 函数:

MATCH path=shortestPath((:City {name: 'München'})-[d:DIRECT*]-(:City {name: 'Hamburg'})) RETURN size(d) AS weight, path
© www.soinside.com 2019 - 2024. All rights reserved.