Depth First Traversal (ali DFS) za graf je podoben Globina Prvi prehod drevesa . Edina zanka pri tem je, da za razliko od dreves lahko grafi vsebujejo cikle (vozlišče je lahko obiskano dvakrat). Če se želite izogniti večkratni obdelavi vozlišča, uporabite logično obiskano matriko. Graf ima lahko več kot eno prečkanje DFS.
primer:
Vnos: n = 4, e = 6
0 -> 1, 0 -> 2, 1 -> 2, 2 -> 0, 2 -> 3, 3 -> 3
Izhod: DFS iz točke 1 : 1 2 0 3Vnos: n = 4, e = 6
2 -> 0, 0 -> 2, 1 -> 2, 0 -> 1, 3 -> 3, 1 -> 3
Izhod: DFS iz točke 2 : 2 0 1 3
Priporočeno: prosimo, rešite ga na VADITE najprej, preden preidete na rešitev.
Kako deluje DFS?
Iskanje najprej v globino je algoritem za prečkanje ali iskanje drevesnih ali grafičnih podatkovnih struktur. Algoritem se začne pri korenskem vozlišču (izbere neko poljubno vozlišče kot korensko vozlišče v primeru grafa) in raziskuje, kolikor je mogoče vzdolž vsake veje, preden se vrne nazaj.
Spodaj je izvedba zgornjega pristopa:
Python3
niz v cela števila
# 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> |
>
>Izhod
Following is Depth First Traversal (starting from vertex 2): 2 0 1 3>
Časovna zapletenost: O(V+E), kjer je V število vozlišč v grafu in E število robov
Pomožni prostor: O(V+E)
Oglejte si celoten članek Iskanje najprej po globini ali DFS za graf za več podrobnosti!