图结构练习——判断给定图是否存在合法拓扑序列
2015-08-06 16:03
225 查看
题目描述
给定一个有向图,判断该有向图是否存在一个合法的拓扑序列。输入
输入包含多组,每组格式如下。第一行包含两个整数n,m,分别代表该有向图的顶点数和边数。(n<=10)
后面m行每行两个整数a b,表示从a到b有一条有向边。
输出
若给定有向图存在合法拓扑序列,则输出YES;否则输出NO。示例输入
1 0 2 2 1 2 2 1
示例输出
YES NO
对一个有向无环图(Directed Acyclic Graph简称DAG)G进行拓扑排序,是将G中所有顶点排成一个线性序列,使得图中任意一对顶点u和v,若<u,v> ∈E(G),则u在线性序列中出现在v之前。
通常,这样的线性序列称为满足拓扑次序(TopoiSicai Order)的序列,简称拓扑序列。
#include<stdio.h> #include<string.h> int main() { int n,m,i,j,a,b,flag,k; while(~scanf("%d%d",&n,&m)) { int v[20]={0},mp[20][20]={0},vis[20]={0}; for(i=1;i<=m;i++) { scanf("%d%d",&a,&b); mp[a][b]=1; v[b]++; } for(i=1;i<=n;i++) { flag=0; for(j=1;j<=n;j++) { if(!v[j] && ! vis[j]) { vis[j]=1; for(k=1;k<=n;k++) { if(mp[j][k]==1) { v[k]--; } } flag=1; break; } } if(flag==0) break; } if(!flag) printf("NO\n"); else printf("YES\n"); } return 0; }
相关文章推荐
- 全新的membership框架Asp.net Identity(2)——绕不过的Claims
- #文档名:用 Objective-C 编程
- python
- Coursera台大机器学习技法课程笔记14-Radial Basis Function Network
- 实现虚拟机与真机的文件共享
- [LeetCode] Unique Binary Search Trees II
- 杭电1250Hat's Fibonacci
- js json map对象传给java后台接收
- C++:STL入门汇总
- Spring与Jedis的集成
- iOS开发UI篇—程序启动原理和UIApplication
- HashMap source code analyze/ Hashmap/Hashtable/ConcurentHashmap/synchronizedMap
- Ringbuffer为什么这么快?
- Android 上滑显示底部导航,下滑显示标题bar
- Linux系统下MongoDB的简单安装与基本操作
- TDD开发感悟
- iOS设计模式之单例模式
- windows update更新时出现错误代码 8024200D解决方法(转)
- Oracle中触发器(1)
- cursor样式