判断有向图是否有环
来源:互联网 发布:网络转换地址优缺点 编辑:程序博客网 时间:2024/06/10 02:49
输入一个有向图,判断该图是否有环
1.测试数据较小, 可用二维数组记录边, 深搜
int x,y,n,m,a[105][105];int v[105],flag;void dfs(int i){ if(v[i]==1){ //已访问过 flag=0; return; } v[i]=1; //正在访问 for(int j=1; j<=n&&flag;j++) if(a[i][j]) dfs(j); v[i]=2; //访问结束}int main(){ flag=1; scanf("%d %d",&n,&m); for(int i=0;i<m;i++){ scanf("%d %d",&x,&y); a[x][y]=1; } for(int i=1;i<=n;i++) if(!v[i]) dfs(i); printf("%d\n",flag); //1为有环 return 0;}
2.测试数据较大,拓扑排序
(入度为0就放入数组, 再将邻接点入度减1,为0再放入数组)
int into[100009];vector<int> g[100009];bool topo(int n) { int a[100009], k = 0; for (int i=1; i<=n; i++) { if(into[i]==0) a[k++]=i; } for (int i=0; i<k; i++) { int u = a[i]; int size = g[u].size(); for (int j = 0; j < size; j++) { into[g[u][j]]--; if(into[g[u][j]]==0) a[k++] = g[u][j]; } } return (n==k);} int main() { int t,n,m,u,v; cin >> t; while(t--) { cin >> n >> m; memset(into, 0, sizeof(into)); for (int i = 0; i < n+10; i++) while(!g[i].empty()) g[i].pop_back(); for (int i = 0; i < m; i++) { cin >> u >> v; g[u].push_back(v); into[v]++; } if (topo(n)) cout << "无环" << endl; else cout << "有环" << endl;}return 0;}
0 0
- 判断有向图是否有环
- 判断有向图是否有环
- 有向图判断是否有环
- 判断有向图是否有环
- 判断有向图是否有环
- 判断无向图是否有环
- 判断有向图是否存在环
- 判断无向图是否有环
- 无向图判断是否有环
- 判断有向图是否有圈
- 判断有向图图是否有环
- 判断有向图是否有环 [No. 75]
- 编译期判断有向图中是否有环
- 判断有向图中是否有环
- 判断一个有向图是否有环
- 判断有向图是否有环及拓扑排序
- 判断有向图中是否有环
- Python 判断 有向图 是否有环
- opencv学习系列(一)---直方图与匹配
- Community over Code
- Docker — 云时代的程序分发方式
- 稀疏矩阵的加减法、乘法、求逆运算
- 导入工程时出现"Target runtime Apache Tomcat v7.0 is not defined"
- 判断有向图是否有环
- adb命令 简单总结
- SpringLDAPDemo
- java中关于static 类型的变量声明与初始化的问题
- 用MySQL创建数据库和数据库表
- 银行核心系统“瘦身”后的重新定义
- 在vs2012 cocos2d-x 3.2项目中导入CocoStudio库
- 1.2 palsquare
- 关于浏览器缓存