neo4j替代路径

时间:2014-05-01 11:09:46

标签: java neo4j cypher

我正在做一个简单的路由软件,而且经典需要实现一个好的产品"向客户提供不同的途径。

我使用的是密码,但就我所知,它是无法实现的......我只能找到" allShortestPath"我的图表而不是"几乎是最短的"。

我的想法是执行多次dijkstra在前一个路径的第一个上添加一些权重,所以它可能"可能"会看另一条道路。问题是我不知道如何让密码在我的图表上评估临时值。

我甚至可以考虑使用neo4j的java api创建一个自定义插件,我可以直接使用dijkstra algo和重量评估器,但是我不认为我可以获得所有可能的路径,但只有一个

提前感谢任何建议

2 个答案:

答案 0 :(得分:1)

如何获得最短路径的长度,然后向neo4j询问该长度+ 1的路径。

也许这对你有用:

START n1=node(167), n2=node(169) MATCH p = (n1)-[*..3]-(n2) WHERE length(p) = length(shortestPath((n1)-[]-(n2)))+1 RETURN p

您可能希望限制最大路径长度。

答案 1 :(得分:0)

正在进行的工作允许dijkstra返回多条路径,目前它返回所有最短路径。

START n1=node(167), n2=node(169) 
MATCH p=shortestPath((n1)-[]-(n2))
WITH n1,n2,length(p)+1 as almost_shortest
MATCH p = (n1)-[*..3]-(n2) 
WHERE length(p) = almost_shortest 
RETURN p

我仍然最好使用修改后的dijkstra或其他路径查找算法,为您提供路径数。

使用遍历描述或双向遍历描述和自定义PathEvaluators / PathExpander,您可以构建任何您想要的内容。