个人模板 图的深度,广度优先遍历
2017-03-27 19:31
267 查看
#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算法:图遍历(深度优先和广度优先)
- 二叉树深度优先遍历、广度优先遍历、非递归遍历算法
- 二叉树遍历(前序、中序、后序、层次、深度优先、广度优先遍历)
- [转】二叉树与图的深度优先和广度优先遍历
- (百度笔试)简要说明树的深度优先、广度优先遍历算法,及非递归实现的特点
- 图的遍历-(深度优先&广度优先)
- 深度优先搜索遍历与广度优先搜索遍历
- 算法与数据结构实验5:图的深度和广度优先遍历(邻接矩阵)
- 【概念】【二叉树】深度优先遍历、广度优先遍历和非递归遍历
- 二叉树的深度优先,广度优先,以及层次遍历算法
- 树的深度优先与广度优先遍历
- 广度优先遍历-BFS、深度优先遍历-DFS
- 图遍历算法分析--深度优先、广度优先(1)
- 图的遍历 (深度优先 广度优先)
- 图的广度优先和深度优先遍历
- 图的遍历(1)邻接矩阵的深度和广度优先遍历
- 图的创建,深度优先遍历,广度优先遍历。