(送信元、送信先)、そのタイプ(ツリー、バック、フォワード、クロス)ですか?深さ優先検索を変更する
答えて
良い質問。
これはthe source you posted as commentに基づく解決策です。 重要:開始/終了テーブルに誤りがあり、第三の行3列目は "[U] <端を終了[V]" でなければならない代わりに "終了[U]>終わり[V]"
void main(G, s){
for each node v in G{
explored[v]=false
parent[v]=null
start[v]=end[v]=null
}
Global clock = 0
DFS(G, s, s)
}
void DFS(G, s, parent){
explored[s] = true;
parent[s] = parent
start[s]=clock
clock++
for each u=(s,v){
if(explored[v] == false){
DFS(G, v)
}
print (s + "-->" + v +"type: " + getType(s,v))
}
end[s]=clock
clock++
}
String getType(s, v){
if(start[s]<start[v]){
if(end[s]>end[v]) return "Tree edge"
else return "Forward edge"
else{
if(end[s]<end[v]) return "Back edge"
else return "Cross edge"
}
}
これは正しいように見えます。しかし、重要な部分は、O(1)で 'isOneOfParents'(先祖は私が推測する)を実装できることです。各頂点に入力時刻と終了時刻を格納することは可能です(http://www.cs.yale.edu/homes/aspnes/pinewiki/DepthFirstSearch.html)。 – Gassa
私はisOneOfParents(はい、祖先)について考えた最初の実装はO(ツリーの最大深さ)でした。あなたのソースを使って私はそれをO(1)にしようとします –
Ok。 [あなたのソース](http://www.cs.yale.edu/homes/aspnes/pinewiki/DepthFirstSearch.html)に感謝します。私はタイマーの使用に気が付きませんでした。私はそれを追加する答えを編集しています。 –
ここに行きます。コードJavaの
import java.util.ArrayList;
import java.util.List;
class Node {
public String name;
public List<Node> connections = new ArrayList<>();
boolean visited = false;
Node(String name) {
this.name = name;
}
}
class DFS {
// Main part.
public static void search(Node root) {
if (root == null) {
return;
}
root.visited = true;
for (Node node : root.connections) {
if (!node.visited) {
// Print result.
System.out.println(root.name + "->" + node.name);
search(node);
}
}
}
}
public class App {
public static void main(String[] args) {
Node a = new Node("a");
Node b = new Node("b");
Node c = new Node("c");
Node d = new Node("d");
Node e = new Node("e");
a.connections.add(b);
b.connections.add(a);
b.connections.add(c);
b.connections.add(d);
c.connections.add(b);
c.connections.add(d);
d.connections.add(b);
d.connections.add(c);
d.connections.add(e);
DFS.search(d);
}
}
- 1. 変更の深さ優先探索
- 2. グラフの深さ優先検索
- 3. Pythonの深さ優先検索(DFS)コード
- 4. 幅優先検索と深さ優先探しの入出力
- 5. 深さ優先探索アルゴリズム
- 6. 深さ優先のセグメンテーションフォールトで大きなグラフを検索する
- 7. 再帰アルゴリズムで幅優先や深さ優先で検索しますか?
- 8. 深さ優先探索は、Java
- 9. 深さ優先探索 - JavaクラスImplentation
- 10. 深さ優先探索隣接
- 11. のpython深さ優先探索再帰
- 12. 無向グラフの深さ優先検索(DFS)
- 13. は、反復深化深さ優先探索に
- 14. 深さ優先探索中の系図のサイクルを検出する
- 15. ブーストグラフライブラリ - 深さ優先接続された頂点を介してのみ検索
- 16. 深度最初の検索と幅優先探しの理解
- 17. トポロジカル検索と幅優先検索
- 18. MPI Pythonで動的なスポーンを使った深さ優先検索
- 19. 幅優先検索実装
- 20. 幅優先検索の代わりにプロローグ統一が深さ優先検索であるのはなぜですか?
- 21. OpenMP:深さ優先探索のための良い戦略
- 22. ナイトツアーの深さ優先探索無限ループ
- 23. この深さ優先検索でNullPointerExceptionが生成されるのはなぜですか?
- 24. 幅優先検索の推奨ツリータイプ
- 25. SQLフルテキスト検索結果の優先度
- 26. Javaの8x8グリッドの幅優先検索
- 27. スレッドの優先度を変更する
- 28. 深さ優先探索が目標到達状態に到達しない
- 29. SQLクエリ:深さ3度までの接続先の検索
- 30. SQL検索の優先順位を選択する
あなたが試したことがある場合は、まずあなたのコードを入れて試してみてください –
どこから来たのかを覚えています。あなたの質問にDepth First Searchのコードを追加してください。そこから取得します。 –
あなたの編集した質問はオリジナルよりも理解しづらいものです。あなたがしようとしていることを言葉で説明してください。また、コードを変更する方法を尋ねる場合は、変更しようとしているコードを表示してください。 –