bfs,dfs遍历图的模板
2017-01-31 13:16
411 查看
/*bfs,dfs模板,遍历无向图*/ #include <cstdio> #include <cstring> #include <queue> #define N 100 #define INF 0x3f3f3f using namespace std; int n, m; int map ;//可达矩阵,1表示可达,0表示不可达。 int vis ;//记录顶点是否已被访问 int cnt; void initgraph() { scanf("%d%d", &n, &m); for (int i = 1; i <= n; i++) { for (int j = 1; j <= n; j++) { if (i == j) map[i][j] = 0; else map[i][j] = INF; } } } void creatgraph() { int x, y; for (int i = 0; i < m; i++) { scanf("%d%d", &x, &y); map[x][y] = map[y][x] = 1;//无向图 } } void dfs(int cur) { printf("%d ", cur); cnt++; if (cnt == n) return; else { for (int i = 1; i <= n; i++) { if (map[cur][i] == 1 && !vis[i]) { vis[i] = 1; dfs(i); } } } } void bfs(int cur) { queue<int> q; while (!q.empty()) q.pop();//初始化队列 q.push(cur);//第一个元素进队列 while (!q.empty()) { for (int i = 1; i <= n; i++) { if (map[q.front()][i] == 1 && !vis[i]) { q.push(i); vis[i] = 1; } } printf("%d ", q.front()); q.pop(); } } int main() { initgraph(); creatgraph(); cnt = 0; vis[1] = 1;//标记第一个顶点 //dfs(1); bfs(1); return 0; }
相关文章推荐
- 图的遍历(bfs+dfs)模板
- 图的遍历--使用邻接表作为存储结构的遍历(DFS、BFS)C语言
- 图的遍历-深搜(DFS)和广搜(BFS)
- 【图】BFS遍历、DFS遍历、Topology排序、判断二分性
- BFS/DFS 模板 代码
- BFS() DFS() 模板
- 邻接矩阵存储的无向图深度优先(DFS)广度优先(BFS)遍历
- DFS&&BFS模板
- 图的遍历(DFS和BFS)
- 深度优先遍历(DFS)和广度优先遍历(BFS)
- 图的遍历程序模板--DFS
- 图的BFS遍历和DFS遍历(广度优先和深度优先)
- 图的遍历:DFS和BFS
- 图的遍历算法(DFS和BFS)
- 基于邻接表存储的图的DFS与BFS遍历
- 图的遍历:DFS BFS
- BFS、DFS、先序、中序、后序遍历的非递归算法(java)
- 图的遍历(搜索)算法(深度优先算法DFS和广度优先算法BFS)
- 图的遍历(最小转机数)——dfs&&bfs
- 图的遍历:BFS和DFS