【个人模板】图的广度,深度优先遍历
来源:互联网 发布:wap淘宝是什么访客 编辑:程序博客网 时间:2024/05/23 05:07
#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"); } } }
阅读全文
0 0
- 【个人模板】图的广度,深度优先遍历
- 图的遍历-(深度优先&广度优先)
- 图的遍历:深度优先、广度优先
- 图:图的遍历(深度优先遍历、广度优先遍历)
- 图的遍历:深度优先遍历和广度优先遍历
- 图的广度和深度优先遍历
- 图的深度<-->广度 优先遍历
- 图的深度、广度优先遍历
- 图的深度和广度优先遍历
- 图的深度优先遍历和广度优先遍历算法
- 图的深度优先遍历和广度优先遍历实现
- 图的深度优先遍历和广度优先遍历
- 图的深度优先遍历和广度优先遍历
- 图的深度优先遍历与广度优先遍历
- 图的深度优先遍历和广度优先遍历
- 图的深度优先遍历和广度优先遍历
- 图的广度优先遍历和深度优先遍历
- 图的创建 深度优先遍历 广度优先遍历
- 中文乱码问题
- 习题4.1
- CodeForces 315B(线段树+区间更新)
- 安卓面经之未解决问题
- PyQt5学习教程11:几种signal与slot处理事件的方法
- 【个人模板】图的广度,深度优先遍历
- Android中Toast的基础用法
- nodejs之pool连接池
- LeetCode.187 Repeated DNA Sequences
- 反射Class类、Constructor类、Field类
- SSH整合Demo
- Selenium常用方法2
- JAVA相关基础知识
- 缱绻旖旎万千,不过红楼遗梦