• 【图论】判断给定图是否存在合法拓扑序列


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

    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;
    }
  • 相关阅读:
    Android 数据存储之 SQLite数据库存储
    Android 数据存储之 SharedPreferences储存
    Android 数据存储之 文件存储
    SSTABLE简介
    zookeeper原理
    改变win7驱动图标
    也谈谈拖延癌
    STM32f103之外部中断
    LPC1768/1769之CAN控制器概述(附库函数下载地址)
    Silicon C8051F340之时钟系统
  • 原文地址:https://www.cnblogs.com/6bing/p/4117786.html
Copyright © 2020-2023  润新知