图结构练习——判断给定图是否存在合法拓扑序列
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> int map[11][11],s[11]; void tp(int n) { int i,j,t,k; for(i=1;i<=n;i++){ t=0; for(j=1;j<=n;j++){ if(s[j]==0){ t=1; s[j]--; for(k=1;k<=n;k++) if(map[j][k]) s[k]--; break; } } if(!t){ printf("NO\n"); return ; } } printf("YES\n"); } void main() { int m,n,a,b; while(~scanf("%d%d",&n,&m)) { memset(map,0,sizeof(map)); memset(s,0,sizeof(s)); while(m--){ scanf("%d%d",&a,&b); s[b]++; map[a][b]=1; } tp(n); } }