拓扑排序判断
来源:互联网 发布:剑雨江湖法器进阶数据 编辑:程序博客网 时间:2024/06/05 07:27
拓扑排序的实现方法:
(1)从有向图中选择一个没有前驱(即入度为0)的顶点并且输出它.
(2)从网中删去该顶点,并且删去从该顶点发出的全部有向边.
(3)重复上述两步,直到剩余的网中不再存在没有前趋的顶点为止.
Harry and Magical Computer
Accepts: 408
Submissions: 1622
Time Limit: 2000/1000 MS (Java/Others)
Memory Limit: 32768/32768 K (Java/Others)
分析:判断是否可以拓扑排序,有向图中是否有环,最简单的拓扑排序算法。
#include <iostream>#include<stdio.h>#include<algorithm>#include<stdlib.h>#include<string.h>#include<stack>using namespace std;int arc[501][501] ;int top ;int used[501] ; // 标记访问过int index[501] ; // 统计入度数组int m , n ;stack<int>st ;bool istopsort(){ int countt = 0 ; for(int i =1 ; i<= n ; i++){ if(!index[i]) st.push(i); } while(!st.empty()){ int tt = st.top() ; index[tt] -- ; st.pop() ; countt ++ ; for(int i = 1 ; i<=n ;i++) if(arc[tt][i]){ index[i]-- ; if(!index[i]) st.push(i) ; } } if(countt == n) return 1 ; else return 0 ;}int main(){ int a,b; while(scanf("%d%d", &n , &m) != EOF){ memset(arc, 0, sizeof(arc)) ; memset(index , 0 , sizeof(index)) ; for(int i =1 ; i<=m ; i++){ scanf("%d%d" , &a , &b) ; if(!arc[a][b]){ arc[a][b] = 1 ; index[b] ++ ;} } if(istopsort()) cout<<"YES"<<endl; else cout<<"NO"<<endl; } return 0;}
0 0
- 判断拓扑排序
- 拓扑排序判断
- 拓扑排序<反向拓扑+有向环的判断>
- 拓扑排序 判断是否有环
- 拓扑排序,AVO网的判断
- hdu_3342_拓扑排序判断是否有环
- COMP2907 图论 强连通判断 拓扑排序
- 拓扑排序(1)--hdu2647(拓扑排序邻接表模板 应用判断是否存在环)
- 拓扑排序(判断有向图是否有回路)
- 判断有向图是否存在回路—拓扑排序
- 图论:回路判断和拓扑排序(DFS)
- poj 1094 拓扑排序(给不等式判断递增串)
- 拓扑排序(判断有向图是否有回路)
- 拓扑排序(判断是否是有向无环图)
- 判断有向图是否有环及拓扑排序
- HDU - 4324 Triangle LOVE(拓扑排序 + 判断环路)
- hdoj 4324 (Triangle LOVE )拓扑排序判断成环
- 拓扑排序(判断有向图是否有回路)
- javascript标签在页面中的位置探讨
- 局部自适应多核聚类
- Quartz集群实战及原理解析
- VS2005、VS2008中SetUnhandledExceptionFilter函数不起作用
- android设置移动联通电信wap接入点
- 拓扑排序判断
- Android-Universal-Image-Loader 图片异步加载类库的使用(超详细配置)
- testNG报错Exception in thread "main" java.lang.NoClassDefFoundError: com/beust/jcomm
- Android第二十四天 Service
- iOS中的定时器 - 控制了时间,就控制了一切(一)
- jQuery框架开发
- SQL Server 2005 的版本和组件
- 开通博客了
- 全局异常崩溃信息自定义处理