我正在做一个简单的路由软件,而且经典需要实现一个好的产品"向客户提供不同的途径。
我使用的是密码,但就我所知,它是无法实现的......我只能找到" allShortestPath"我的图表而不是"几乎是最短的"。
我的想法是执行多次dijkstra在前一个路径的第一个上添加一些权重,所以它可能"可能"会看另一条道路。问题是我不知道如何让密码在我的图表上评估临时值。
我甚至可以考虑使用neo4j的java api创建一个自定义插件,我可以直接使用dijkstra algo和重量评估器,但是我不认为我可以获得所有可能的路径,但只有一个
提前感谢任何建议
答案 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,您可以构建任何您想要的内容。