题目描述

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

输入

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

第一行包含两个整数n,m,分别代表该有向图的顶点数和边数。(n<=10)
后面m行每行两个整数a b,表示从a到b有一条有向边。

输出

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

示例输入

1 0
2 2
1 2
2 1

示例输出

YES
NO

提示

#include <iostream>
#include<stack>
#include<cstdio>
#include<cstring>
#include<cstdlib>
using namespace std;
typedef struct arcnode//表结点;
{
    int adj;
    struct arcnode *next;
}arcnode;
typedef struct vnode//头结点;
{
    int data;
    arcnode *first;
}adjlist[10];
typedef struct//表结构;
{
    adjlist a;
    int vn,an;
}ALG;
int n,m,i,j;
int indegree[10];//记录每个节点的入度;
void create(ALG &g)//建立有向图的邻接表;
{
    int v1,v2;
    arcnode *p;
    g.an=m;
    g.vn=n;
    for(i=1;i<=g.vn;i++)
        g.a[i].first=NULL;//头结点清空;
    for(i=1;i<=g.an;i++)
    {
        scanf("%d%d",&v1,&v2);
        p=new arcnode;
        p->adj=v2;
        indegree[v2]++;
        p->next=g.a[v1].first;
        g.a[v1].first=p;
    }
}
void topo(ALG &g)//判断图是否满足拓扑排序;
{
    int k;
    arcnode *p;
    stack<int>s;
    for(i=1;i<=n;i++)
        if(!indegree[i])//入度为零的结点入栈;
        s.push(i);
    int count=0;//记录出栈元素的个数,最后判断是否满足拓扑排序;
    while(!s.empty())
    {
        j=s.top();
        s.pop();
        count++;//统计栈内有多少个元素;
        for(p=g.a[j].first;p;p=p->next)//删除所有以j为起点的边;
        {
            k=p->adj;
            if(!(--indegree[k]))//将新入度为零的结点入栈;
                s.push(k);
        }
    }
    if(count<n)//出栈元素少于结点个数,说明存在原图有环;
        printf("NO\n");
    else
    printf("YES\n");
}
int main()
{
    ALG g;
    while(~scanf("%d%d",&n,&m))
    {
        memset(indegree,0,sizeof(indegree));//元素出度的初始化;
        create(g);
        topo(g);
    }
    return 0;
}

#include <iostream>
#include<cstdio>
#include<queue>
using namespace std;
#include<cstring>
#include<algorithm>
int map[20][20],in[15],vis[15];
int main()
{
    int n,m;
    int i,j,k;
    while(cin>>n>>m)
    {
      memset(in,0,sizeof(in));
      memset(map,0,sizeof(map));
      memset(vis,0,sizeof(vis));
      while(m--)
      {
      int v,u;
      cin>>u>>v;
      if(!map[u][v])
           in[v]++,map[u][v]=1;
      }

for(k=0;k<n;k++){
       for(i=1;i<=n;i++)
       if(!in[i]&&!vis[i]){
         vis[i]=1;
         for(j=1;j<=n;j++){
         if(map[i][j])
          map[i][j]=0,in[j]--;
         }
         break;
       }
       if(i>n)
        break;
      }
      if(k<n){
      cout<<"NO\n";
      }
      else
      cout<<"YES\n";

}

}

图结构练习——判断给定图是否存在合法拓扑序列相关推荐

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

    图结构练习--判断给定图是否存在合法拓扑序列 Time Limit: 1000MS Memory Limit: 65536KB Submit Statistic Problem Description ...

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

    Description 给定一个有向图,判断该有向图是否存在一个合法的拓扑序列. Input 输入包含多组,每组格式如下. 第一行包含两个整数n,m,分别代表该有向图的顶点数和边数.(n<=10 ...

  3. GNN-图卷积模型-2016:PATCHY-SAN【图结构序列化:将图结构转换成了序列结构,然后直接利用卷积神经网络在转化成的序列结构上做卷积】

    我们之前曾提到卷积神经网络不能应用在图结构上是因为图是非欧式空间,所以大部分算法都沿着找到适用于图的卷积核这个思路来走. 而 PATCHY-SAN 算法 <Learning Convolutio ...

  4. python 列表转图结构_Python读取网络(图)边列表数据进而转化为邻接矩阵

    import networkx as nx G = nx.Graph() path = './edge_list.txt' edge_list = [] node_set = set() #集合的特性 ...

  5. ICML2020 | 神经网络的图结构如何影响其预测性能?

    作者 | 董靖鑫 审稿 | 程玉 今天给大家介绍的是来自斯坦福大学的Jure Leskovec课题组发表在ICML2020上的文章" Graph Structure of Neural Ne ...

  6. Theano学习笔记(三)——图结构

    图结构(Graph Structures)这是理解Theano该基金会的内部运作. Theano编程的核心是用符号占位符把数学关系表示出来. 图结构的组成部分 如图实现了这段代码: importthe ...

  7. 线性结构、树结构、图结构

    1.数组和顺序表 2.单链表 3.循环链表 4.双向链表 5.队列和栈 6.树结构的特性 7.二叉树的遍历 8.哈夫曼树和哈夫曼编码 9.二叉树排序 10.图结构的特性 11.图的遍历

  8. 图神经网络(一)图信号处理与图卷积神经网络(2)图信号与图的拉普拉斯矩阵

    图神经网络(一)图信号处理与图卷积神经网络(2)图信号与图的拉普拉斯矩阵  给定图G=(V,E)G=(V,E)G=(V,E),V表示图中的节点集合,假设其长度为NNN,图信号是一种描述V→RV→RV→ ...

  9. sdut 2140 有向图中是否存在拓扑序列的判断

    Problem Description 给定一个有向图,判断该有向图是否存在一个合法的拓扑序列. 讲解:http://blog.csdn.net/dm_vincent/article/details/ ...

最新文章

  1. 马尔科夫随机场的基本概念
  2. linux下mysql root密码忘记修改方法
  3. Docker Review - Docker 概念 入门篇
  4. log4j.properties
  5. php 中 相关文章 的思路,WordPress实现推荐相关文章功能代码
  6. Java最佳实践–多线程环境中的DateFormat
  7. Elasticsearch】 es Match Query
  8. mysql 半同步 插件_编写半同步复制插件
  9. JavaScript 中的相等检测
  10. 分享:一篇webpack配置基础绝好文章
  11. Android自动化测试之MonkeyRunner使用
  12. 投资体系-01-房产投资-普通购房者和投资者 分水岭
  13. HTML文件mhl,比HDMI更强!MHL与HDMI技术解析
  14. 利用Python实现scissors-rock-paper-lizard-Spock小游戏
  15. 10分钟了解何为ECharts
  16. 读书有益——》祝你今天愉快
  17. DVD-Video 解谜 - VOB文件
  18. #Paper Reading# Gradient Harmonized Single-stage Detector
  19. 163邮箱注册,163邮箱申请方法
  20. 图像风格迁移算法学习总结

热门文章

  1. windows7 python 指定源组播 10049_Python3组播通信编程实现教程(发送者+接收者)
  2. android游戏编程之从零开始_纯C语言程序员写的编程新手入门基础小游戏之最炫酷推箱子...
  3. 嵌套饼图_你真的了解matplotlib吗?---环形图
  4. python文件路径拼接多出斜杠_浅谈python中拼接路径os.path.join斜杠的问题
  5. linux怎样自动检查link文件_怎样理解和识别 Linux 中的文件类型 | Linux 中国
  6. python中find函数运算结果类型_Python 运算符与数据类型
  7. python中math模块函数_Python常用的一些内建函数和math模块函数
  8. python 获取昨天的日期_利用Python来实现报表的自动发送,解放你时间去做更有意思的事情...
  9. java new一个对象的过程中发生了什么
  10. python将文本文件加密后输出_Python:将Casear密码和柱状转置密码的加密输出写入.txt文件...