数据结构实验之图论十:判断给定图是否存在合法拓扑序列
来源:互联网 发布:张国荣歌曲我知你好 编辑:程序博客网 时间:2024/05/22 11:52
数据结构实验之图论十:判断给定图是否存在合法拓扑序列
Time Limit: 1000MS Memory Limit: 65536KB
SubmitStatistic
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
#include <bits/stdc++.h>using namespace std;int a[1100][1100], vis[1100], du[1100];int m, n;void tupu(){ int flag; for(int i = 1; i <= n; i++)//寻找n次,每次都找一个度为0切没有被访问过的节点依次寻找。 { flag = 0; for(int j = 1; j <= n; j++)//节点从1到n依次遍历寻找。 { if(vis[j] == 0 && du[j] == 0)//找到一个度为0的节点,且没有被访问过。 { vis[j] = 1;//将此节点标志位1. for(int k = 1; k <= n; k++)//以此节点为起点的弧去掉。 { if(a[j][k] == 1) { du[k]--; } } flag = 1; break;//结束这一次查找 } } } if(flag == 1)//若每一次都可以找到度为0的节点则是拓扑排序。 { cout << "YES" << endl; } else { cout << "NO" << endl; }}int main(){ int i, j, x; while(cin >> n >> m) { memset(a, 0, sizeof(a)); memset(vis, 0, sizeof(vis)); memset(du, 0, sizeof(du)); for(x = 0; x < m; x++) { cin >> i >> j; a[i][j] = 1; du[j]++; } tupu(); } return 0;}
阅读全文
0 0
- 数据结构实验之图论十:判断给定图是否存在合法拓扑序列
- 数据结构实验之图论十:判断给定图是否存在合法拓扑序列
- 数据结构实验之图论十:判断给定图是否存在合法拓扑序列
- 数据结构实验之图论十:判断给定图是否存在合法拓扑序列
- 数据结构实验之图论十:判断给定图是否存在合法拓扑序列
- 数据结构实验之图论十:判断给定图是否存在合法拓扑序列
- 数据结构实验之图论十:判断给定图是否存在合法拓扑序列
- 数据结构实验之图论十:判断给定图是否存在合法拓扑序列
- 数据结构实验之图论十:判断给定图是否存在合法拓扑序列
- 数据结构实验之图论十:判断给定图是否存在合法拓扑序列
- 数据结构实验之图论十:判断给定图是否存在合法拓扑序列
- 数据结构实验之图论十:判断给定图是否存在合法拓扑序列
- 数据结构实验之图论十:判断给定图是否存在合法拓扑序列
- 数据结构实验之图论十:判断给定图是否存在合法拓扑序列
- 数据结构实验之图论十:判断给定图是否存在合法拓扑序列
- 数据结构实验之图论十:判断给定图是否存在合法拓扑序列
- 数据结构实验之图论十:判断给定图是否存在合法拓扑序列
- 2140 数据结构实验之图论十:判断给定图是否存在合法拓扑序列
- Linux中的防火墙--iptables
- 搭建一个struts2的简易Demo
- js对数组中对象字段的排序
- 【Scikit-Learn 中文文档】成对的矩阵, 类别和核函数
- ListVIew点击事件失效
- 数据结构实验之图论十:判断给定图是否存在合法拓扑序列
- Java中类的加载顺序剖析(常用于面试题)
- Create_Maximum_Number
- Capstone训练营1
- web-inf
- 【Scikit-Learn 中文文档】预测目标 (y) 的转换
- 转载http://blog.csdn.net/liaoxinmeng/article/details/
- 为什么需要知识图谱?什么是知识图谱?——KG的前世今生
- 【Scikit-Learn 中文文档】数据集加载工具