グラフの深さ優先トラバーサル (DFS) は次のようになります。 ツリーの深さ優先探索 。ここでの唯一の注意点は、ツリーとは異なり、グラフにはサイクルが含まれる可能性がある (ノードが 2 回訪問される可能性がある) ということです。ノードを複数回処理しないようにするには、ブール値の訪問済み配列を使用します。グラフには複数の DFS トラバーサルを含めることができます。
例:
入力: n = 4、e = 6
0 -> 1、0 -> 2、1 -> 2、2 -> 0、2 -> 3、3 -> 3
出力: 頂点 1 からの DFS : 1 2 0 3入力: n = 4、e = 6
2 -> 0、0 -> 2、1 -> 2、0 -> 1、3 -> 3、1 -> 3
出力: 頂点 2 からの DFS : 2 0 1 3
推奨: で解決してください 練習する 解決策に進む前に、まず。
DFS はどのように機能しますか?
深さ優先検索は、ツリーまたはグラフのデータ構造を走査または検索するためのアルゴリズムです。アルゴリズムはルート ノード (グラフの場合はルート ノードとして任意のノードを選択) から開始し、バックトラックする前に各ブランチに沿って可能な限り探索します。
上記のアプローチの実装を以下に示します。
最初のコンピューターが発明されたのはいつですか
Python3
文字列.replaceall Java
# Python3 program to print DFS traversal> # from a given graph> from> collections>import> defaultdict> # This class represents a directed graph using> # adjacency list representation> class> Graph:> ># Constructor> >def> __init__(>self>):> ># Default dictionary to store graph> >self>.graph>=> defaultdict(>list>)> > ># Function to add an edge to graph> >def> addEdge(>self>, u, v):> >self>.graph[u].append(v)> > ># A function used by DFS> >def> DFSUtil(>self>, v, visited):> ># Mark the current node as visited> ># and print it> >visited.add(v)> >print>(v, end>=>' '>)> ># Recur for all the vertices> ># adjacent to this vertex> >for> neighbour>in> self>.graph[v]:> >if> neighbour>not> in> visited:> >self>.DFSUtil(neighbour, visited)> > ># The function to do DFS traversal. It uses> ># recursive DFSUtil()> >def> DFS(>self>, v):> ># Create a set to store visited vertices> >visited>=> set>()> ># Call the recursive helper function> ># to print DFS traversal> >self>.DFSUtil(v, visited)> # Driver's code> if> __name__>=>=> '__main__'>:> >g>=> Graph()> >g.addEdge(>0>,>1>)> >g.addEdge(>0>,>2>)> >g.addEdge(>1>,>2>)> >g.addEdge(>2>,>0>)> >g.addEdge(>2>,>3>)> >g.addEdge(>3>,>3>)> >print>(>'Following is Depth First Traversal (starting from vertex 2)'>)> > ># Function call> >g.DFS(>2>)> # This code is contributed by Neelam Yadav> |
>
123映画
>出力
Following is Depth First Traversal (starting from vertex 2): 2 0 1 3>
時間計算量: O(V+E) ここで、V はグラフ内の頂点の数、E はエッジの数です。
補助スペース: O(V+E)
完全な記事を参照してください グラフの深さ優先検索または DFS 詳細については!