数据结构实验之图论十:判断给定图是否存在合法拓扑序列
来源:互联网 发布:微信一秒语音制作软件 编辑:程序博客网 时间:2024/05/22 16:55
数据结构实验之图论十:判断给定图是否存在合法拓扑序列
Time Limit: 1000MS Memory Limit: 65536KB
Submit Statistic
Problem Description
给定一个有向图,判断该有向图是否存在一个合法的拓扑序列。
Input
输入包含多组,每组格式如下。
第一行包含两个整数n,m,分别代表该有向图的顶点数和边数。(n<=10)
后面m行每行两个整数a b,表示从a到b有一条有向边。
Output
若给定有向图存在合法拓扑序列,则输出YES;否则输出NO。
Example Input
1 02 21 22 1
Example Output
YESNO
这个题目没有要求我们求拓扑排序的序列,只是判断有没有环的结构,所以我们只需要遍历一遍一次删掉入度为0的节点,当然不要忘记这时候会对与它相连的节点有影响,依次进行,如果最后没有节点则不存在环,有一个合法的拓扑排序序列,否则就存在环的结构。
#include <iostream>#include <string.h>using namespace std;int gra[15][15], du[15]; //标记节点的度bool visit[15];int main(){ int n, m; int u, v; int cnt; while(cin>>n>>m && n){ cnt = n; //记录节点数 memset(gra, 0, sizeof(gra)); memset(visit, false, sizeof(visit)); memset(du, 0, sizeof(du)); while(m--){ cin>>u>>v; gra[u][v] = 1; du[v]++; } for(int i = 1; i <= n; i++){ //进行n次寻找 for(int j = 1; j <= n; j++){ if(du[j] == 0&& visit[j] == 0){ //先找到一个度为0的节点 visit[j] = true; cnt--; //每找到一个度为0的节点cnt-1 for(int k = 1; k <= n; k++){ if(gra[j][k]) du[k]--; } break; } } } if(cnt) //如果cnt的值为0说明所有的节点都已经被录入到拓扑序列中,否则就还存在度不是 cout<<"NO"<<endl; //0的节点,那么就存在环的结构 else cout<<"YES"<<endl; }}
阅读全文
0 0
- 数据结构实验之图论十:判断给定图是否存在合法拓扑序列
- 数据结构实验之图论十:判断给定图是否存在合法拓扑序列
- 数据结构实验之图论十:判断给定图是否存在合法拓扑序列
- 数据结构实验之图论十:判断给定图是否存在合法拓扑序列
- 数据结构实验之图论十:判断给定图是否存在合法拓扑序列
- 数据结构实验之图论十:判断给定图是否存在合法拓扑序列
- 数据结构实验之图论十:判断给定图是否存在合法拓扑序列
- 数据结构实验之图论十:判断给定图是否存在合法拓扑序列
- 数据结构实验之图论十:判断给定图是否存在合法拓扑序列
- 数据结构实验之图论十:判断给定图是否存在合法拓扑序列
- 数据结构实验之图论十:判断给定图是否存在合法拓扑序列
- 数据结构实验之图论十:判断给定图是否存在合法拓扑序列
- 数据结构实验之图论十:判断给定图是否存在合法拓扑序列
- 数据结构实验之图论十:判断给定图是否存在合法拓扑序列
- 数据结构实验之图论十:判断给定图是否存在合法拓扑序列
- 数据结构实验之图论十:判断给定图是否存在合法拓扑序列
- 数据结构实验之图论十:判断给定图是否存在合法拓扑序列
- 2140 数据结构实验之图论十:判断给定图是否存在合法拓扑序列
- linux 安装软件
- YII2.0接入快递查询
- SpringBoot入门
- Linux入门
- C++——只是单纯的纠正一下我一直以来的一个错误观点
- 数据结构实验之图论十:判断给定图是否存在合法拓扑序列
- 【Scikit-Learn 中文文档】26 密度估计
- cookie 和session 的区别详解
- jsp存储相关内容
- CentOS 6.5 配置IP地址的三种方法
- 细说JavaScript中this指向问题
- 常用排序算法之希尔排序
- Python学习日记 第三天
- 题解