OJ2140图结构练习——判断给定图是否存在合法拓扑序列
2016-08-18 18:48
316 查看
图结构练习——判断给定图是否存在合法拓扑序列
Time Limit: 1000MS Memory limit: 65536K
题目描述
给定一个有向图,判断该有向图是否存在一个合法的拓扑序列。
输入
输入包含多组,每组格式如下。第一行包含两个整数n,m,分别代表该有向图的顶点数和边数。(n<=10)
后面m行每行两个整数a b,表示从a到b有一条有向边。
输出
若给定有向图存在合法拓扑序列,则输出YES;否则输出NO。
示例输入
1 0 2 2 1 2 2 1
示例输出
YES NO
提示
就是判断是不是形成了环
来源
赵利强
示例程序
#include<stdio.h> #include<stdlib.h> #include<string.h> #include<stack> #include<iostream> using namespace std; int p[15][15],d[15],vis[15]; int n,count,m; void topo() { stack<int>s; int i; for(i=1; i<=n; i++) if(d[i]==0) { s.push(i); vis[i]=1; } while(!s.empty()) { int t=s.top(); s.pop(); count++; for(i=1; i<=n; i++) { if(p[t][i]&&!vis[i]) { d[i]--; if(!d[i]) { vis[i]=1; s.push(i); } } } } } int main() { int a,b,i; while(~scanf("%d%d",&n,&m)) { memset(p,0,sizeof(p)); memset(vis,0,sizeof(vis)); memset(d,0,sizeof(d)); while(m--) { scanf("%d%d",&a,&b); p[a][b]=1; d[b]++; } count=0; topo(); if(count!=n) printf("NO\n"); else printf("YES\n"); } }
相关文章推荐
- SDUT2140图结构练习——判断给定图是否存在合法拓扑序列
- SDUT OJ 2140 图结构练习——判断给定图是否存在合法拓扑序列
- SDUT2140_图结构练习——判断给定图是否存在合法拓扑序列(邻接表)
- 图结构练习——判断给定图是否存在合法拓扑序列 SDUT 2140
- SDUT OJ 2140 图结构练习——判断给定图是否存在合法拓扑序列
- [SDUT](2140)图结构练习——判断给定图是否存在合法拓扑序列 ---拓扑排序(图)
- SDUT 2140 图结构练习——判断给定图是否存在合法拓扑序列
- SDUT 2140 图结构练习——判断给定图是否存在合法拓扑序列
- 暑假集训 8.19 图结构练习——判断给定图是否存在合法拓扑序列 sdut2140
- sdut oj2140 图结构练习——判断给定图是否存在合法拓扑序列
- SDUT2140图结构练习——判断给定图是否存在合法拓扑序列
- SDUT 图结构练习——判断给定图是否存在合法拓扑序列
- 图结构练习——判断给定图是否存在合法拓扑序列
- 图结构练习——判断给定图是否存在合法拓扑序列
- 图结构练习——判断给定图是否存在合法拓扑序列
- 图结构练习——判断给定图是否存在合法拓扑序列
- SDUT 图结构练习——判断给定图是否存在合法拓扑序列
- 图结构练习——判断给定图是否存在合法拓扑序列
- 图结构练习——判断给定图是否存在合法拓扑序列
- 图结构练习——判断给定图是否存在合法拓扑序列