《算法笔记》——DFS、BFS实现

以下是基于图的链表表示的dfs和bfs的演示:

 

《《算法笔记》——DFS、BFS实现》

按照链表表示输入以下数据:

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

最后一个8用来标识这个节点输入结束。可以得到深搜和广搜的结果。

代码如下:

#include <iostream>
#include <cstdio>
#include <list>
#include<cstring>
#include <vector>
 #include <queue>
using namespace std;
 int n;
vector< list<int> > graph;
bool visited[100] = {0};
void dfs(int v)
 {
    list<int>::iterator it;
     visited[v] = true;
   printf("%5d", v);
     for (it = graph[v].begin(); it != graph[v].end(); ++it)
      if (!visited[*it])
           dfs(*it);
 }
 void bfs(int v)
 {
     list<int>::iterator it;
   printf("%5d", v);
     visited[v] = true;
    queue<int> t;
     t.push(v);
    while (!t.empty())
     {
        v = t.front();
        t.pop();
        for (it = graph[v].begin(); it != graph[v].end(); ++it)
           if (!visited[*it])
           {
               printf("%5d", *it);
                t.push(*it);
               visited[*it] = true;
             }
   }
   cout << endl;
}
 int main()
{

    cout << "input the vertex num:"<< endl;
     cin >> n;
    vector< list<int> >::iterator it;
    for (int i = 0; i < n; ++i)
    {
        list<int> il;
        int t;
         while (cin >> t && t != n)
           il.push_back(t);
        graph.push_back(il);
   }
cout << "result for bfs:" << endl;
bfs(0);
memset(visited, 0, sizeof(visited));                   //重新初始化标志数组
cout << "result for dfs:" << endl;
dfs(0);
return 0;
}

运行结果如下图:

《《算法笔记》——DFS、BFS实现》

    原文作者:算法笔记
    原文地址: https://blog.csdn.net/qq_42835351/article/details/81910758
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞