Depth First Traversal (sau DFS) pentru un grafic este similar cu Adâncimea Prima traversare a unui copac . Singura captură aici este că, spre deosebire de copaci, graficele pot conține cicluri (un nod poate fi vizitat de două ori). Pentru a evita procesarea unui nod de mai multe ori, utilizați o matrice booleană vizitată. Un grafic poate avea mai mult de o traversare DFS.
Exemplu:
Intrare: n = 4, e = 6
0 -> 1, 0 -> 2, 1 -> 2, 2 -> 0, 2 -> 3, 3 -> 3
Ieșire: DFS de la vârful 1 : 1 2 0 3
Intrare: n = 4, e = 6
2 -> 0, 0 -> 2, 1 -> 2, 0 -> 1, 3 -> 3, 1 -> 3
Ieșire: DFS de la vârful 2 : 2 0 1 3
Recomandat: Vă rugăm să rezolvați problema PRACTICĂ mai întâi, înainte de a trece la soluție.
Cum funcționează DFS?
Căutarea în profunzime este un algoritm pentru parcurgerea sau căutarea structurilor de date arborescente sau grafice. Algoritmul începe de la nodul rădăcină (selectând un nod arbitrar ca nod rădăcină în cazul unui grafic) și explorează cât mai departe posibil de-a lungul fiecărei ramuri înainte de a reveni.
Mai jos este implementarea abordării de mai sus:
Python3
cum se transformă un șir într-un int
# 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> |
>
>Ieșire
ce este uri
Following is Depth First Traversal (starting from vertex 2): 2 0 1 3>
Complexitatea timpului: O(V+E) unde V este numărul de vârfuri din grafic și E este numărul de muchii
Spațiu auxiliar: O(V+E)
Vă rugăm să consultați articolul complet pe Depth First Search sau DFS pentru un grafic pentru mai multe detalii!