डेप्थ-फर्स्ट सर्च (डीएफएस) एक ग्राफ ट्रैवर्सल एल्गोरिथम है। इस एल्गोरिथम में, एक प्रारंभिक शीर्ष दिया जाता है, और जब एक आसन्न शीर्ष मिलता है, तो यह पहले उस आसन्न शीर्ष पर जाता है और उसी तरह से पार करने का प्रयास करता है।
यह पूरी गहराई से आगे बढ़ता है, जितना भी जा सकता है, उसके बाद यह नया पथ खोजने के लिए पिछले शिखर तक पहुंचने के लिए पीछे हट जाता है।
डीएफएस को पुनरावृत्त तरीके से लागू करने के लिए, हमें स्टैक डेटा संरचना का उपयोग करने की आवश्यकता है। यदि हम इसे पुनरावर्ती रूप से करना चाहते हैं, तो बाहरी स्टैक की आवश्यकता नहीं है, इसे रिकर्सन कॉल के लिए आंतरिक स्टैक किया जा सकता है।
इनपुट और आउटपुट
Input: The Adjacency matrix of a graph. A B C D E F A 0 1 1 1 0 0 B 1 0 0 1 1 0 C 1 0 0 1 1 0 D 1 1 1 0 1 1 E 0 1 0 1 0 1 F 0 0 1 1 1 0 Output: DFS Traversal: C F E B D A
एल्गोरिदम
dfs(vertices, start)
इनपुट: सभी शीर्षों की सूची, और प्रारंभ नोड।
आउटपुट: ग्राफ़ में सभी नोड्स को ट्रैवर्स करें।
Begin initially make the state to unvisited for all nodes push start into the stack while stack is not empty, do pop element from stack and set to u display the node u if u is not visited, then mark u as visited for all nodes i connected to u, do if ith vertex is unvisited, then push ith vertex into the stack mark ith vertex as visited done done End
उदाहरण
#include<iostream> #include<stack> using namespace std; #define NODE 6 typedef struct node { int val; int state; //status }node; int graph[NODE][NODE] = { {0, 1, 1, 1, 0, 0}, {1, 0, 0, 1, 1, 0}, {1, 0, 0, 1, 0, 1}, {1, 1, 1, 0, 1, 1}, {0, 1, 0, 1, 0, 1}, {0, 0, 1, 1, 1, 0} }; void dfs(node *vertex, node start) { node u; stack<node> myStack; for(int i = 0; i<NODE; i++) { vertex[i].state = 0; //not visited } myStack.push(start); while(!myStack.empty()) { //pop and print node u = myStack.top(); myStack.pop(); cout << char(u.val+'A') << " "; if(u.state != 1) { //update vertex status to visited u.state = 1; vertex[u.val].state = 1; for(int i = 0; i<NODE; i++) { if(graph[i][u.val]) { if(vertex[i].state == 0) { myStack.push(vertex[i]); vertex[i].state = 1; } } } } } } int main() { node vertices[NODE]; node start; char s; for(int i = 0; i<NODE; i++) { vertices[i].val = i; } s = 'C'; //starting vertex C start.val = s-'A'; cout << "DFS Traversal: "; dfs(vertices, start); cout << endl; }
आउटपुट
DFS Traversal: C F E B D A