一個使用 C++ 按步驟列印 DFS 遍歷的程式


在本教程中,我們將討論一個使用深度優先搜尋在給定的二叉樹中列印遍歷的步驟的程式。

這將包括深度優先搜尋中發生的所有步驟,包括回溯過程。

在 DFS 過程中,我們將遍歷每個節點,同時儲存父節點和使用的邊。在遍歷期間,如果鄰接邊已被訪問,則可以將確切的節點列印為深度優先搜尋中的一個步驟。

示例

#include <bits/stdc++.h>
using namespace std;
const int N = 1000;
vector<int> adj[N];
//printing the steps in DFS traversal
void dfs_steps(int u, int node, bool visited[],
vector<pair<int, int< > path_used, int parent, int it){
   int c = 0;
   for (int i = 0; i < node; i++)
   if (visited[i])
      c++;
   if (c == node)
      return;
//marking the node as visited
   visited[u] = true;
   path_used.push_back({ parent, u });
   cout << u << " ";
   for (int x : adj[u]){
      if (!visited[x])
         dfs_steps(x, node, visited, path_used, u, it + 1);
   }
   for (auto y : path_used)
   if (y.second == u)
   dfs_steps(y.first, node, visited,
   path_used, u, it + 1);
}
void dfs(int node){
   bool visited[node];
   vector<pair<int, int> > path_used;
   for (int i = 0; i < node; i++)
   visited[i] = false;
   dfs_steps(0, node, visited, path_used, -1, 0);
   }
void add_edge(int u, int v){
   adj[u].push_back(v);
   adj[v].push_back(u);
}
int main(){
   int node = 11, edge = 13;
   add_edge(0, 1);
   add_edge(0, 2);
   add_edge(1, 5);
   add_edge(1, 6);
   add_edge(2, 4);
   add_edge(2, 9);
   add_edge(6, 7);
   add_edge(6, 8);
   add_edge(7, 8);
   add_edge(2, 3);
   add_edge(3, 9);
   add_edge(3, 10);
   add_edge(9, 10);
   dfs(node);
   return 0;
}

輸出

0 1 5 1 6 7 8 7 6 1 0 2 4 2 9 3 10

更新日期:01-Nov-2019

399 次瀏覽

開啟你的職業生涯

透過完成課程獲得認證

開始
廣告