10

私はグラフを扱わなければならないプロジェクトに取り組んでいます...私はグラフを使用して、2つの停留所の間のバスと自転車によるルートを取得しています。

事実、私の関係にはすべて、関係の開始点から終了までに必要な時間が含まれています。

ノード間の最短経路を取得するために、cypherの最短経路関数を使用しています。しかし、何か、最短経路は最速ではありません...。

関係によってリンクされていない2つのノード間のすべてのパスを取得する方法はありますか?

ありがとう

編集:

実際、グラフを変更して、簡単にします。だから私はまだすべてのノードを持っています。これで、関係タイプは、ノードから別のノードに移動するのに必要な時間に対応します。

cypherのshortestPath関数は、関係が少ないパスを提供します。すべてのタイプ(時間)の加算が最も小さいパスを返すようにしたいと思います。それは可能ですか?

ありがとう

4

2 に答える 2

11

cypher では、関係によってリンクされていない 2 つのノード間のすべてのパスを取得し、重みの合計で並べ替えるには、1.9 で導入された reduce 関数を使用できます。

start a=node(...), b=node(...) // get your start nodes
match p=a-[r*2..5]->b // match paths (best to provide maximum lengths to prevent queries from running away)
where not(a-->b) // where a is not directly connected to b
with p, relationships(p) as rcoll // just for readability, alias rcoll
return p, reduce(totalTime=0, x in rcoll: totalTime + x.time) as totalTime
order by totalTime

最短のみが必要な場合は、最後に制限 1 をスローできます。

于 2013-02-11T17:12:47.063 に答える
4

Dijkstra/Astar アルゴリズムを使用できますが、これはあなたにぴったりだと思われます。http://api.neo4j.org/1.8.1/org/neo4j/graphalgo/GraphAlgoFactory.htmlをご覧ください。

残念ながら、Cypher のものは使用できません。

于 2013-02-11T14:47:31.913 に答える