数据结构实验之图论十:判断给定图是否存在合法拓扑序列

Time Limit: 1000 ms Memory Limit: 65536 KiB

Submit Statistic Discuss

Problem Description

给定一个有向图,判断该有向图是否存在一个合法的拓扑序列。

Input

输入包含多组,每组格式如下。

第一行包含两个整数n,m,分别代表该有向图的顶点数和边数。(n<=10)

后面m行每行两个整数a b,表示从a到b有一条有向边。

Output

若给定有向图存在合法拓扑序列,则输出YES;否则输出NO。

Sample Input

  1. 1 0
  2. 2 2
  3. 1 2
  4. 2 1

Sample Output

  1. YES
  2. NO

拓扑排序算法:

  1. void TopSort ( )
  2. {
  3. queue <int> Q;
  4. int counter = 0;
  5. Vertex V, W;
  6. for( each vertex V ) //图中每个顶点
  7. {
  8. if( Indegree[V] == 0 ) //入度为零
  9. Q.push( V );
  10. }
  11. while( !Q.empty() )
  12. {
  13. V = Q.front();
  14. Q.pop();
  15. TopNum[counter++] = V; //记录V的输出序号
  16. for( each W adjacent to V )
  17. {
  18. if( --Indegree[W] == 0 )
  19. Q.push( W );
  20. }
  21. }
  22. if( counter != NumVertex )
  23. ERROR ( "Graph has a cycle" );
  24. }

有合法的拓扑排序需要不是无向有环图;进行广搜,如果搜到遍历过的点就是有环图了;

  1. #include <iostream>
  2. #include <queue>
  3. #include <string.h>
  4. using namespace std;
  5. int G[1100][1100];
  6. int visit[1100];
  7. int now, i, j, n, m;;
  8. queue<int> Q;
  9. void BFS( )
  10. {
  11. int flag = 1;
  12. Q.push(1);
  13. visit[1] = 1;
  14. while( !Q.empty() )
  15. {
  16. now = Q.front();
  17. Q.pop();
  18. for( i=1; i<=n; i++ )
  19. {
  20. if( G[now][i] )
  21. {
  22. if( !visit[i] )
  23. {
  24. visit[i] = 1;
  25. Q.push(i);
  26. }
  27. else
  28. {
  29. flag = 0;
  30. break;
  31. }
  32. }
  33. }
  34. if(!flag) break;
  35. }
  36. if(flag) cout << "YES" << endl;
  37. else cout << "NO" << endl;
  38. }
  39. int main()
  40. {
  41. while( cin >> n >> m )
  42. {
  43. memset( G, 0, sizeof(G) );
  44. memset( visit, 0, sizeof(visit) );
  45. while( m-- )
  46. {
  47. int a, b;
  48. cin >> a >> b;
  49. G[a][b] = 1;
  50. }
  51. BFS();
  52. }
  53. return 0;
  54. }

SDUT OJ 数据结构实验之图论十:判断给定图是否存在合法拓扑序列的更多相关文章

  1. SDUT-2140_判断给定图是否存在合法拓扑序列

    数据结构实验之图论十:判断给定图是否存在合法拓扑序列 Time Limit: 1000 ms Memory Limit: 65536 KiB Problem Description 给定一个有向图,判 ...

  2. 图结构练习——判断给定图是否存在合法拓扑序列(dfs算法(第一个代码),邻接矩阵(前两个代码),邻接表(第三个代码))

    sdut 2140 图结构练习——判断给定图是否存在合法拓扑序列 Time Limit: 1000ms   Memory limit: 65536K  有疑问?点这里^_^ 题目描述  给定一个有向图 ...

  3. SDUT2140图结构练习——判断给定图是否存在合法拓扑序列

    拓扑序列的判断方法为不存在有向环,代码实现的话有两种,一种是直接去判断是否存在环,较为难理解一些,另一种的话去判断结点入度,如果存在的入度为0的点大于一个,则该有向图肯定不存在一个确定的拓扑序列 #i ...

  4. 数据结构实验之图论十:判断给定图是否存在合法拓扑序列(SDUT 2140)

    分析:BFS判断是否有环. #include<bits/stdc++.h> using namespace std; typedef long long ll; int gra[200][ ...

  5. 拓扑排序 判断给定图是否存在合法拓扑序列 自家oj1393

    //拓扑排序判断是否有环 #include<cstdio> #include<algorithm> #include<string.h> #include<m ...

  6. 图结构练习——判断给定图是否存在合法拓扑序列(sdutoj)

    #include<stdio.h>#include<string.h>int d[15],map[15][15],vis[15];int main(){    int i,j, ...

  7. SDUT OJ 数据结构实验之图论八:欧拉回路

    数据结构实验之图论八:欧拉回路 Time Limit: 1000 ms Memory Limit: 65536 KiB Submit Statistic Discuss Problem Descrip ...

  8. SDUT OJ 数据结构实验之图论六:村村通公路(最小生成树)

    数据结构实验之图论六:村村通公路 Time Limit: 1000 ms Memory Limit: 65536 KiB Submit Statistic Discuss Problem Descri ...

  9. SDUT OJ 数据结构实验之图论五:从起始点到目标点的最短步数(BFS)

    数据结构实验之图论五:从起始点到目标点的最短步数(BFS) Time Limit: 1000 ms Memory Limit: 65536 KiB Submit Statistic Discuss P ...

随机推荐

  1. vue中使用markdown富文本,并在html页面中展示

    想给自己的后台增加一个markdown编辑器,下面记录下引用的步骤 引入组件mavon-editor 官网地址:https://github.com/hinesboy/mavonEditor // 插 ...

  2. Python基础学习四 函数

    1.内置函数 Python内置了很多有用的函数,是可以直接调用的. 参考链接:https://docs.python.org/3/library/functions.html 调用函数的时候,如果传入 ...

  3. java之yield(),sleep(),wait()区别详解-备忘笔记(转)

    1.sleep() 使当前线程(即调用该方法的线程)暂停执行一段时间,让其他线程有机会继续执行,但它并不释放对象锁.也就是说如果有synchronized同步快,其他线程仍然不能访问共享数据.注意该方 ...

  4. vbs获取html内容

    Dim content,name,password,arr,pos msg1="请输入ip和端口号地址"&chr(13)&chr(10)&"如ht ...

  5. 常用的软件设计模式的Java实现——让编程从野生到飞起

    常用的软件设计模式的Java实现——让编程从野生到飞起_野生技术协会_科技_bilibili_哔哩哔哩  https://www.bilibili.com/video/av7596511/

  6. Mesh Filter & Mesh Render

    [Mesh Filter] The Mesh Filter takes a mesh from your assets and passes it to the Mesh Renderer for r ...

  7. Yii 2 load() 和 save()

    我这里用的数据库是mongo 数据库 为栗子: public function load($data, $formName = null) { $scope = $formName === null ...

  8. ROS 下使用3D激光雷达 velodyne vlp-16

    Velodyne VLP16型激光雷达横向视角360°,纵向视角30° 系统和ROS版本:Ubuntu 14.04 ,ros indigo 1. 安装驱动 sudo apt-get install r ...

  9. ssh时传递环境变量

    设置要传递的变量: -o SendEnv=Varname 但是不是每个都能传,受服务器上sshd_config里的下面两个选项的控制: AcceptEnv and PermitUserEnvironm ...

  10. 浏览器访问www.meituan.com过程

    “从浏览器输入 xxx 到跳转完成的过程发生了什么”,是一个常见的比较综合的面试题,以下是我查阅了一些资料后总结的,如有错误,还望批评指正.(以美团网为例) 1.在浏览器地址栏输入:meituan.c ...