图结构练习——判断给定图是否存在合法拓扑序列(dfs算法(第一个代码),邻接矩阵(前两个代码),邻接表(第三个代码))
2013-08-09 11:01
579 查看
sdut 2140
第一行包含两个整数n,m,分别代表该有向图的顶点数和边数。(n<=10)
后面m行每行两个整数a b,表示从a到b有一条有向边。
View Code
测试数据:
5 4
1 3
2 3
3 4
3 5
输出:
YES
-1 -1 -1 -1 -1
1 2 3 4 5
测试连接:http://wenku.baidu.com/view/bb32ee2e4b73f242336c5f53.html
图结构练习——判断给定图是否存在合法拓扑序列
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 网上看到有人的思路很巧妙,忍不住就稍作修改,贴了上来:http://www.cnblogs.com/luyingfeng/archive/2013/07/29/3223090.html 第一种思路是直接判断环是否存在的思路,这种思路采用dfs算法,是非常规思路:
#include<stdio.h> #include<string.h> #include<stdlib.h> struct vode { int v; struct vode *next; }; struct vode *f[300]; int m,n; int rudu[300]; int stack[300],top; void hs() { int i,k=0; while(k=!k) for(i=1;i<=m;i++) if(rudu[i]==0) { k=0; rudu[i]--; stack[top++]=i; struct vode *p; for(p=f[i];p!=NULL;p=p->next) rudu[p->v]--; break; } } int main() { while(scanf("%d%d",&m,&n)!=EOF) { memset(f,0,sizeof(f)); memset(rudu,0,sizeof(rudu)); memset(stack,0,sizeof(stack)); top=0; int i; for(i=1;i<=n;i++) { int u,v; scanf("%d%d",&u,&v); rudu[v]++; struct vode *p; p=(struct vode *)malloc(sizeof(struct vode)); p->v=v; p->next=f[u]; f[u]=p; } hs(); /*//下面的循环可以显示出拓扑序列 for(i=0;i<=top-1;i++) printf("%d ",stack[i]); printf("\n"); */ if(top==m)printf("YES\n"); else printf("NO\n"); } return 0; }
View Code
测试数据:
5 4
1 3
2 3
3 4
3 5
输出:
YES
-1 -1 -1 -1 -1
1 2 3 4 5
测试连接:http://wenku.baidu.com/view/bb32ee2e4b73f242336c5f53.html
相关文章推荐
- SDUT2140_图结构练习——判断给定图是否存在合法拓扑序列(邻接表)
- 图结构练习——判断给定图是否存在合法拓扑序列
- 图结构练习——判断给定图是否存在合法拓扑序列
- 图结构练习——判断给定图是否存在合法拓扑序列
- SDUT 图结构练习——判断给定图是否存在合法拓扑序列
- [SDUT](2140)图结构练习——判断给定图是否存在合法拓扑序列 ---拓扑排序(图)
- SDUT2140图结构练习——判断给定图是否存在合法拓扑序列
- 图结构练习——判断给定图是否存在合法拓扑序列
- SDUT OJ 2140 图结构练习——判断给定图是否存在合法拓扑序列
- 图结构练习——判断给定图是否存在合法拓扑序列
- 图结构练习——判断给定图是否存在合法拓扑序列
- 图结构练习——判断给定图是否存在合法拓扑序列
- 暑假集训 8.19 图结构练习——判断给定图是否存在合法拓扑序列 sdut2140
- 图结构练习——判断给定图是否存在合法拓扑序列
- 图结构练习——判断给定图是否存在合法拓扑序列
- 图结构练习——判断给定图是否存在合法拓扑序列
- 图结构练习——判断给定图是否存在合法拓扑序列 SDUT 2140
- 图结构练习——判断给定图是否存在合法拓扑序列
- 图结构练习——判断给定图是否存在合法拓扑序列
- 图结构练习——判断给定图是否存在合法拓扑序列