图结构练习——判断给定图是否存在合法拓扑序列
来源:互联网 发布:安全网络知识 编辑:程序博客网 时间:2024/06/15 11:23
图结构练习——判断给定图是否存在合法拓扑序列Time Limit: 1000MS Memory limit: 65536K
题目描述
给定一个有向图,判断该有向图是否存在一个合法的拓扑序列。
输入
输入包含多组,每组格式如下。
第一行包含两个整数n,m,分别代表该有向图的顶点数和边数。(n<=10)
后面m行每行两个整数a b,表示从a到b有一条有向边。
输出
若给定有向图存在合法拓扑序列,则输出YES;否则输出NO。
示例输入
1 02 21 22 1
示例输出
YESNO
提示
三个for循环,一个找入度为零的结点。一个将这个节点射出的边删除。这时,又会出现入度为零的边,再进行第三层循环。
//1、输入并用邻接矩阵保存点与点之间的关系,用数组保存每个点的入度。
//2、每次找一个入度为零的点,将所有和他有关的点的入度减一。
//3、重复步骤二,直到没有入度为零的点为止。
//4、如果这时还有入度不为零的点,证明有环,输出NO,反之输出YES。
#include<bits/stdc++.h>using namespace std;int mmap[15][15],vis[15],du[15];int main(){ int n,m,flag; int u,v; while(~scanf("%d%d",&n,&m)&&n) { memset(mmap,0,sizeof(mmap)); memset(vis,0,sizeof(vis)); memset(du,0,sizeof(du)); while(m--) { cin>>u>>v; mmap[u][v]=1; du[v]++; } for(int i=1;i<=n;i++) { flag=0; for(int j=1;j<=n;j++) { if(du[j]==0&&vis[j]==0) { vis[j]=1; for(int k=1;k<=n;k++) { if(mmap[j][k]) du[k]--; } flag=1; break; } } } if(flag==0) printf("NO\n"); else printf("YES\n"); } return 0;}
0 0
- SDUT 图结构练习——判断给定图是否存在合法拓扑序列
- 图结构练习——判断给定图是否存在合法拓扑序列
- SDUT2140_图结构练习——判断给定图是否存在合法拓扑序列(邻接表)
- 图结构练习——判断给定图是否存在合法拓扑序列
- 图结构练习——判断给定图是否存在合法拓扑序列
- 图结构练习——判断给定图是否存在合法拓扑序列
- 图结构练习——判断给定图是否存在合法拓扑序列
- 图结构练习——判断给定图是否存在合法拓扑序列
- 图结构练习——判断给定图是否存在合法拓扑序列
- SDUT OJ 2140 图结构练习——判断给定图是否存在合法拓扑序列
- sdut 图结构练习——判断给定图是否存在合法拓扑序列
- 图结构练习——判断给定图是否存在合法拓扑序列
- 图结构练习——判断给定图是否存在合法拓扑序列
- 图结构练习——判断给定图是否存在合法拓扑序列
- 图结构练习——判断给定图是否存在合法拓扑序列
- 图结构练习——判断给定图是否存在合法拓扑序列
- 图结构练习——判断给定图是否存在合法拓扑序列
- 图结构练习——判断给定图是否存在合法拓扑序列
- NOIP 提高 公约数
- FlowRadioGroup-自定义布局
- 数据结构实验之排序六:希尔排序
- JDBC JDBCTemplate Mybatis Hibernate
- 网站路径重写
- 图结构练习——判断给定图是否存在合法拓扑序列
- JavaWeb---MVC设计模式
- 求子矩阵的最大和
- 异常处理
- 原版黑苹果安装教程(Clover引导)
- HDU 1251 字典树的第一个题
- Vijos P1071新年趣事之打牌
- EditText输入法如何不把选项卡顶上去
- 新控件之TextInputLayout