使用neo4j

时间:2019-01-22 09:52:00

标签: javascript node.js graph neo4j

enter image description here 请参阅屏幕截图-最短路径A到D

我有一个图,其中有很多节点代表公交车站。有与公共汽车站相关的公共汽车。 我能够找到从A到G的最短路径(反射方向),即距离和重量。 现在,我必须找到可用的公交车组合,以帮助用户到达目的地。

1)我能够找到公用总线(如果存在)。

2)如何以编程方式找到间隔公交车

示例-从A(来源)到G(目的地)

A --------> B ------> C ------> D ----> E -----> F ---- ----> G

以下是每个公交车站的公交车-

停止。-服务编号(滥用)。

A-120,147,196,197,167,961,961C

B-12,2,2A,121,122,124,147,166,174,196,197,54,167,190,61,961,961C,143

C-12,12e,2,2A,121,122,124,147,166,174,174e,196,197,54,CT18,CT8,167,       190,61,961,961C,143

D-124,147,147e,166,197,61,961,961C,143

E-12,12e,2,2A,197,33,63,80,CT18,CT8,61,961,961C,970,143

F-12,12e,2,2A,174,174e,197,33,51,63,80,61,961,961C

G-174,174e,186,51,143

图中的节点具有关于每条路线的公共汽车的信息。那么我如何找出公共汽车(如果没有直接公共汽车可用)到达A到G?

1)A-> F(961,961C),然后F-> G(174或174e)。

2)A ---> D(197,147,961),然后D-> F(961或961C),然后F-> G(174或174e)等。 < / p>

问题是,如何以编程方式检查到G的直接总线是否可用,或者我要在哪两个总线之间进行互换?

是否有任何密码查询来执行此任务。

我必须找到最少交换次数的4种最佳解决方案。

1 个答案:

答案 0 :(得分:0)

由于每个服务的停靠点都没有排序 ,并且我们无法推断停靠点之间的距离,因此可以通过创建:Stop节点A,B,C,D来对任务进行简单建模,E,F,G,并将它们与相应的:Service节点链接起来。

类似(仅代表A,B,C站和服务147、196、12):

partial graph

然后可以使用path finding functions之一来获取结果。对于从B到C的最短路径,您可以

MATCH (start:Stop{name:'B'}), (end:Stop{name:'C'})
CALL algo.shortestPath.stream(start, end)
YIELD nodeId, cost
RETURN algo.getNodeById(nodeId).name AS name

希望这能使您走上正确的轨道。

编辑: 要仅检查直接路线是否可用,可以查询:

MATCH (start:Stop {name:"A"})-[]-(bus:Service)-[]-(end:Stop {name:"B"}) RETURN bus

This should return two result nodes
> (:Service {number: 196})
> (:Service {number: 12})