数据结构实验之图论十:判断给定图是否存在合法拓扑序列
2017-12-12 09:33
274 查看
Problem Description
给定一个有向图,判断该有向图是否存在一个合法的拓扑序列。Input
输入包含多组,每组格式如下。第一行包含两个整数n,m,分别代表该有向图的顶点数和边数。(n<=10)后面m行每行两个整数a b,表示从a到b有一条有向边。Output
若给定有向图存在合法拓扑序列,则输出YES;否则输出NO。Example Input
1 0 2 2 1 2 2 1
Example Output
YES NO
思路:先找到一个入度为0的点,遍历,并将该点所指向的所有的点的入度减一,继续找下一个入度为0的点,直到遍历完所有的点。
代码:
#include <bits/stdc++.h>#define inf 0x3f3f3f3fusing namespace std;int dis[1001][1001], v[1001], du[1001];int main(){ int n, m, a, b, i, j, flag; while(~scanf("%d", &n)) { scanf("%d", &m); if(m==0) { printf("YES\n"); continue; } memset(du, 0, sizeof(du)); memset(dis, 0, sizeof(dis)); memset(v, 0, sizeof(v)); while(m--) { scanf("%d %d", &a, &b); dis[a][b]=1; du[b]++; } for(i=1; i<=n; i++) { flag=0; for(j=1; j<=n; j++) { if(v[j]!=1&&du[j]==0) { for(int k=1; k<=n; k++) { if(dis[j][k]==1) { du[k]--; } } v[j]=1; flag=1; break; } } if(flag==0) break; } if(flag) printf("YES\n"); else printf("NO\n"); } return 0;}
相关文章推荐
- 数据结构实验之图论十:判断给定图是否存在合法拓扑序列
- 数据结构实验之图论十:判断给定图是否存在合法拓扑序列
- 数据结构实验之图论十:判断给定图是否存在合法拓扑序列---bfs判断又向图的无环问题
- 数据结构实验之图论十:判断给定图是否存在合法拓扑序列
- 数据结构实验之图论十:判断给定图是否存在合法拓扑序列
- 数据结构实验之图论十:判断给定图是否存在合法拓扑序列
- 数据结构实验之图论十:判断给定图是否存在合法拓扑序列
- 数据结构实验之图论十:判断给定图是否存在合法拓扑序列
- 数据结构实验之图论十:判断给定图是否存在合法拓扑序列
- 图结构练习——判断给定图是否存在合法拓扑序列
- 数据结构实验之图论十:判断给定图是否存在合法拓扑序列
- 图结构练习——判断给定图是否存在合法拓扑序列
- 2140 数据结构实验之图论十:判断给定图是否存在合法拓扑序列
- SDUTOJ(2140)数据结构实验之图论十:判断给定图是否存在合法拓扑序列
- 图结构练习——判断给定图是否存在合法拓扑序列
- 数据结构实验之图论十:判断给定图是否存在合法拓扑序列
- 数据结构实验之图论十:判断给定图是否存在合法拓扑序列
- 数据结构实验之图论十:判断给定图是否存在合法拓扑序列
- SDUT2140 判断给定图是否存在合法拓扑序列
- 暑假集训 8.19 图结构练习——判断给定图是否存在合法拓扑序列 sdut2140