深度优先搜索
2016-05-31 23:13
260 查看
深度优先搜索的优先遍历深度更大的顶点,所以我们可以借助栈这一数据结构来实现:
1 将要访问的第一个顶点 v 入栈,然后首先对其进行访问; 2 将顶点 v 出栈,依次将与顶点 v 相邻且未被访问的顶点 c 压入栈中; 3 重复第一步操作,直至栈为空。
#include <iostream> #include <vector> #include <cstring> using namespace std; class Graph { private: int n; //!< 顶点数量 vector<int> *edges; //!< 邻接表 bool *visited; public: Graph(int input_n) { n = input_n; edges = new vector<int> ; visited=new bool ; memset(visited,0,n); } ~Graph() { delete[] edges; delete[] visited; } void insert(int x, int y) { edges[x].push_back(y); edges[y].push_back(x); } void dfs(int vertex) { cout<<vertex<<endl; visited[vertex]=true; for(int adj_vertex:edges[vertex]){ if( !visited[adj_vertex]){ dfs(adj_vertex); } } } }; int main() { int n, m, k; cin >> n >> m; Graph g(n); for (int i = 0; i < m; ++i) { int x, y; cin >> x >> y; g.insert(x, y); } cin >> k; g.dfs(k); return 0; }
相关文章推荐
- 搜狗百度360市值齐跌:搜索引擎们陷入集体焦虑?
- 本人即将筹备败家日志,敬请期待!
- IE:使用搜索助手
- 文件遍历排序函数
- C#数据结构之顺序表(SeqList)实例详解
- Lua 学习笔记之C API 遍历 Table实现代码
- Lua教程(七):数据结构详解
- 解析从源码分析常见的基于Array的数据结构动态扩容机制的详解
- C#遍历文件夹后上传文件夹中所有文件错误案例分析
- C#数据结构之队列(Quene)实例详解
- C#数据结构揭秘一
- C#中遍历Hashtable的4种方法
- C#数据结构之单链表(LinkList)实例详解
- Erlang中遍历取出某个位置的最大值代码
- 数据结构之Treap详解
- C++实现图的邻接矩阵存储和广度、深度优先遍历实例分析
- C++实现图的邻接表存储和广度优先遍历实例分析
- C++深度优先搜索的实现方法
- 举例讲解C语言程序中对二叉树数据结构的各种遍历方式
- C++非递归队列实现二叉树的广度优先遍历