zoukankan      html  css  js  c++  java
  • 【图论】判断给定图是否存在合法拓扑序列

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

    Time Limit: 1000MS Memory limit: 65536K

    题目描述

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

    输入

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

    输出

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

    示例输入

    1 0
    2 2
    1 2
    2 1
    

    示例输出

    YES
    NO
    
    #include<stdio.h>
    #include<string.h>
    int indegree[1000];//入度数组
    int mapp[1000][1000];
    int main()
    {
    
        int n, m;
        while(~scanf("%d%d", &n, &m))
        {
            int x, y;
            int cnt=0;
            memset(mapp, 0, sizeof(mapp));
            memset(indegree, 0, sizeof(indegree));
            for(int i=0; i<m; i++)
            {
                scanf("%d%d", &x, &y);
                mapp[x][y] = 1;
                indegree[y]++;//如果x,y有边相连,令y点的入度加1
            }
            for(int i=1; i<=n; i++)
                for(int j=1; j<=n; j++)
                    if(mapp[i][j] && indegree[i]==0)//每次找入度为0的点
                        indegree[j]--;
            for(int i=1; i<=n; i++)
                if(indegree[i]==0)//如果图结构符合拓扑排序的话,cnt会等于点个数
                    cnt++;
    
            if(cnt==n)//不存在环
                 printf("YES
    ");
            else printf("NO
    ");
        }
        return 0;
    }
  • 相关阅读:
    webpack入门
    Javascript隐式转换
    一个最小手势库的实现
    运用JS设置cookie、读取cookie、删除cookie
    不同浏览器下兼容文本两端对齐
    使用CSS3实现一个3D相册
    JavaScript 火的有点过头了,但又能火多久呢?
    强大的css3
    CSS3与页面布局学习总结
    红米手机真机调试问题记录
  • 原文地址:https://www.cnblogs.com/6bing/p/4117786.html
Copyright © 2011-2022 走看看