图的俩种遍历方式(DFS,BFS)C++代码实现
2016-04-02 18:50
507 查看
DFS,BFS
代码显示为输出连通集
算法时间复杂度:
采用邻接表存储图:DFS和BFS都为O(N+E) 采用邻接矩阵存储:DFS和BFS都为O(N^2);
数据结构设计
/// @brief 顶点 /// @param adjacencyList 邻接表 struct vertex { int id; vector<int> adjacencyList; }; vector<bool> visited(N,false); vector<vertex> vertexList(N);
DFS
void dfs(int s,vector<bool>&visited,vector<int>&path,vector<vertex>vertexList) { vector<int> v = vertexList[s].adjacencyList; for (int i=0; i<v.size(); ++i) { if(visited[v[i]]==false) { path.push_back(v[i]); visited[v[i]] = true; dfs(v[i], visited, path, vertexList); } } }
BFS
void bfs(int s,vector<bool>&visited,vector<int>&path,vector<vertex>vertexList) { queue<int>q; q.push(s); while (!q.empty()) { int cur = q.front(); q.pop(); vector<int> v = vertexList[cur].adjacencyList; for (int i=0; i<v.size(); ++i) { if(visited[v[i]]==false) { path.push_back(v[i] a02e ); visited[v[i]] = true; q.push(v[i]); } } } }
相关文章推荐
- 回调函数
- C语言数组实现栈操作
- __restrict,restrict关键字
- 学习C++看到的关于参数以及参数传递方式
- c++中的声明和定义的区别,以及关键字extern的作用
- 八大排序算法(C语言、Java实现)
- 比较C++和Java 一
- C语言,函数指针与指针函数
- 图解VC++ opengl环境配置和几个入门例子
- C++反汇编代码分析
- c语言 冒泡排序 使用数组方式 冒泡函数函数名为void bubble( )
- Problem N: C/C++经典程序训练2---斐波那契(Fibonacci)数列
- 从上到下按层打印二叉树,同一层结点从左至右输出。每一层输出一行。
- Somethings About 《c++编程思想》
- C++中placement new操作符
- C 【数据类型 静态&动态】
- C 【printf 和 scanf 函数的使用】
- C语言,数组做形参
- C++结构体占用内存大小浅析
- 【笔试/面试】—— 奇葩 C/C++ 语法题(二)