图结构练习——判断给定图是否存在合法拓扑序列
2015-08-14 09:58
330 查看
图结构练习——判断给定图是否存在合法拓扑序列
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
提示
来源
赵利强示例程序
viewplaincopyprint如果您复制代码时出现行号,请点击左边的“view
plain”后再复制
#include<stdio.h>
#include<string.h>
int n, m;
int map[20][20];
int in[20];
void tp()
{
int k, f;
for(int i=1;i<=n;i++)
{
f=0;
for(int j=1;j<=n;j++)
{
if(in[j]==0)
{
f=1;///只要有入度为零的点就变成一
in[j]=-1;///删除这个节点
for(int k=1;k<=n;k++)///找与该节点相连的节点
{
if(map[j][k])///如果map的值不为零,说明这两个节点相连
in[k]--;///与该节点相连的节点的入度减一
}
break;///找到一个入度为零的就结束
}
}
if(f==0)///如果结点未输出完,图中就没有了入度为零的结点,证明有环,则不合法
break;
}
if(f==1)
printf("YES\n");
else
printf("NO\n");
}
int main()
{
int u, v;
while(~scanf("%d%d", &n, &m))
{
memset(map,0,sizeof(map));
memset(in,0,sizeof(in));
while(m--)
{
scanf("%d%d", &u, &v);
map[u][v]=1;
in[v]++;
}
tp();
}
return 0;
}
相关文章推荐
- Scala学习笔记(三):基础知识
- 在微信上面如何显示自己公司所有产品,连锁店的地理位置,如何调用高德云图API
- cocos2d 帮助
- SYBASE的select into与insert into使用和区别
- SpringMVC中使用Interceptor拦截器
- 检测正运行你的应用的平台
- SYBASE的select into与insert into使用和区别
- poj 2635
- useful-scripts
- jQuery编程中的一些核心方法简介
- 如何快速地把ppt批量转换pdf呢
- Miller_Rabin素数测试[Fermat小定理][二次探测定理][同余式][Wilson定理]
- linux jdk tomcat项目部署,常见问题
- windbg解决线程死锁
- 【iOS发展-81】setNeedsDisplay刷新显卡,并CADisplayLink它用来模拟计时器效果
- ECMAScript5提供了9个新数组方法:遍历、映射、过滤、检测、简化、和搜索数组
- Java泛型
- MySQL主主同步主键冲突处理
- Xcode bug: imageNamed:方法返回nil
- CSS图片响应式 垂直水平居中