【个人模板】图的广度,深度优先遍历
2017-10-30 22:58
183 查看
#include<stdio.h> #include<bits/stdc++.h> using namespace std; int vis[101]; int a[101][101]; int n,m,sum;//n个点,m条边 void dfs(int s) { printf("%d ",s); sum++; if(sum==n) return; for(int i=1; i<=n; i++) { if(a[s][i]&&!vis[i]) { vis[i]=1; dfs(i); } } } void bfs() { memset(vis,0,sizeof(vis)); queue<int>k; for(int i=1; i<=n; i++) { if(!vis[i]) { vis[i]=1; printf("%d ",i); } k.push(i); while(!k.empty()) { int t=k.front(); k.pop(); for(int j=1; j<=n; j++) { if(!vis[j]&&(a[j][t]==1||a[t][j]==1)) { vis[j]=1; printf("%d ",j); k.push(j); } } } } } int main() { while(scanf("%d%d",&n,&m)==2) { for(int i=1; i<=n; i++) { for(int j=1; j<=n; j++) { if(i==j) a[i][j]=0; else a[i][j]=-1; } } int x,y; for(int i=0; i<m; i++) { scanf("%d%d",&x,&y); a[x][y]=1; a[y][x]=1; } vis[1]=1; sum=0; printf("dfs:\n"); dfs(1); printf("\nbfs:\n"); bfs(); printf("\n"); for(int i=1; i<=n; i++) { for(int j=1; j<=n; j++) { printf(" %d到%d的距离:%d ",i,j,a[i][j]); ///-1表示无法到达 } printf("\n"); } } }
相关文章推荐
- 个人模板 图的深度,广度优先遍历
- 图——广度优先遍历和深度优先遍历——邻接矩阵表示法
- 二叉树的深度和广度优先遍历 - Java实现
- 二叉树与图的深度优先和广度优先遍历
- 图的链式前向星表示及深度广度优先遍历
- 图的存储以及深度优先以及广度优先遍历
- python深度优先与广度优先的遍历算法比较
- 深度优先遍历与广度优先遍历 递归与非递归思路
- 深度、广度优先遍历树
- 图的深度与广度优先遍历
- 图的遍历(深度优先遍历和广度优先遍历)
- 数据结构---图的广度优先遍历和深度优先遍历
- 二叉树的深度优先和广度优先遍历
- 图的遍历:深度优先、广度优先
- 深度优先遍历与广度优先遍历 递归与非递归思路
- java 图的邻接矩阵表示,深度优先遍历,广度优先遍历
- 二叉树遍历(前序、中序、后序、层次、深度优先、广度优先遍历)
- 数据结构:图的遍历--深度优先、广度优先
- python深度优先与广度优先的遍历算法区别
- 二叉排序树的构造、深度优先遍历、广度优先遍历