私はDFSアルゴリズムを使用していて、各エッジを訪問したとマークしたいと考えています。ノードを探してそれをいくつかのセンチネルに置き換える方法がありますが、検索したノードに対応する値を格納すると、ルックアップ時間が長くなります。行列は多くの領域を消費します。そうするための最良のアルゴリズムは何ですか?グラフ内のエッジを訪問する
答えて
頂点ペアのセットを維持するだけで済みます。例:Java HashMap<Pair<Vertex, Vertex>>
。 Pythonでは、2要素タプルのSet
があります。
発見されたばかりの新しい頂点の子孫を列挙し、それらをDFSスタックに追加すると、エッジの訪問が発生します。再帰DFSを使用している場合は、各子孫に対して再帰呼び出しを行うようになります。スタックバージョンは次のとおりです:
dfs(graph)
visitedVertices = \emptyset
visitedEdges = \emptyset
// Try all vertices as search roots
for each vertex r in graph
push r onto empty stack
while notEmpty(stack)
u = pop stack
if u not in visitedVertices
add u to visitedVertices
foreach v such that u->v is in graph
add (u,v) to visitedEdges // Visit the edge
push v on stack
これは、私はあなたがこれをしたい理由はわかりません。正しく実装されたDFSは、自然に各エッジを1回だけ横断します。上記のアルゴリズムを見て、これを自分自身に証明することができます。 (u,v)
の訪問は、u
が以前に訪れたことがない場合にのみ可能です。
おそらく、あなたは、検索の進行状況を見ているか、実際にあなたが訪問したときにエッジに他の情報を追加している他のスレッドがありますか?
私はエッジをリダイレクトしてグラフのオイラー回路を作りたいと思っていて、Fleuryアルゴリズムは私の制約のために複雑すぎる(時間がかかる)、私はエッジを取り除き、ブリッジかどうかをチェックするためにdfsを再適用する余裕がありません。ノードを複数回訪問しようとすると失敗しますか? 1-> 2がマークされていれば、マークされたエッジではないが、それはエッジを生成し、無向であるため、エッジ2-> 1はまだ可能であるか? – idk
@idk申し訳ありませんが、私はあなたが何を求めているのか理解できません。 – Gene
エッジが再配置されていることを意味する歪みのあるオイラー回路があると、グラフオイラー回路を作るために間違った順序で配置されたエッジをリダイレクトすることによって、オイラー回路をもう一度作成します。 – idk
- 1. 訪問N特別なエッジが
- 2. グラフ内の負のエッジ
- 3. OrientDBのshortestPath()の訪問先エッジを取得する
- 4. グラフのDFS、訪問時のマーク
- 5. グラフのノードを訪問する順序を見つけるアルゴリズム
- 6. グラフ内のすべてのノードの距離nの未訪問ノードのカウント
- 7. グラフ内の隣接するエッジを見つける
- 8. KNNエッジ/グラフ
- 9. グラフ内のエッジ間に弧を描画する
- 10. グラフ分類エッジを知る
- 11. グラフ内のエッジの重みを求めるMySQLクエリ
- 12. グラフの相互エッジを検出する
- 13. NetworkXグラフのエッジを解析する
- 14. グラフのエッジを取得する
- 15. 最大数を見つけます。グラフ内のエッジの数
- 16. 予定外訪問の訪問番号
- 17. Rグラフの曲線のエッジ
- 18. エッジでのグラフのクエリ
- 19. ArangoDB csvをエッジ(グラフ)にインポート
- 20. 無向グラフのエッジ数
- 21. Networkxグラフのエッジ描画エラー
- 22. グラフ内の無用なエッジを見つけよう
- 23. ドッカー内の別のホストを訪問するには?
- 24. 、訪問
- 25. ユーザーを訪問する
- 26. Rグラフ:ネットワーク内の三角形のエッジの特定
- 27. グラフ理論最大エッジ?
- 28. Google Botの訪問とBing Botの訪問を区別する方法
- 29. 再訪の訪問元を確認する
- 30. グラフのエッジを昇順にソート
エッジを訪問して記録する必要がありますか?エッジを2回繰り返すには、同じノードを2回通過する必要があります。訪問先のノードを追跡するのは簡単です。あなたは正確に何をしようとしていますか? –
@ A.Sokol私は端を訪れているので、記録する必要があるので、もう一度それを訪れることはありませんが、このような場合には1 - > 2 && 2-> 1が存在します。私はエッジを訪問するので、私はそれらを格納する必要があります。 – idk
あなたはそれに沿って印刷してみませんか? – CodingYoshi