zoukankan      html  css  js  c++  java
  • SDUT 2140 数据结构实验之图论十:判断给定图是否存在合法拓扑序列

     

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

    Time Limit: 1000 ms Memory Limit: 65536 KiB

    Problem Description

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

    Input

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

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

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

    Output

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

    Sample Input

    1 0
    2 2
    1 2
    2 1
    

    Sample Output

    YES
    NO

    提示:该题让你判断这个序列是否存在合法的拓扑序列,而拓扑序列是无环图,如果此图有环就输出NO。

    代码实现如下(g++):
    #include <bits/stdc++.h>
    
    using namespace std;
    
    int Map[110][110];
    int ind[110];
    int sum,n,m;
    
    void topu()
    {
        int c=0;
        queue<int>t;
        for(int i=1;i<=n;i++)
        {
            if(ind[i]==0)//如果该点入度为0,数据的开头入度必为0,将其入队
            {
                t.push(i);
                c++;
            }
        }
        while(!t.empty())
        {
            int s=t.front();
            t.pop();
            for(int i=1;i<=n;i++)
            {
                if(Map[s][i]==1)
                {
                    ind[i]--;
                    if(ind[i]==0)//判断有几个入度为1的,并计数,入队
                    {
                     t.push(i);
                     c++;
                     }
                }
            }
        }
        if(c!=n)//最后判断计的数和结点数是否相同,就是判断是不是除了开头其他结点的入度都为1,就无环。
        printf("NO
    ");
        else
        printf("YES
    ");
    }
    
    int main()
    {
        int a,b,i;
        while(~scanf("%d %d",&n,&m))
        {
            memset(Map,0,sizeof(Map));
            memset(ind,0,sizeof(ind));
            for(i=0;i<m;i++)
            {
                scanf("%d %d",&a,&b);
                Map[a][b]=1;
                ind[b]++;//将b点入度加一
            }
            topu();
        }
        return 0;
    }
    
    
    /***************************************************
    Result: Accepted
    Take time: 0ms
    Take Memory: 244KB
    ****************************************************/
  • 相关阅读:
    jQuery 获取jsp页面中用iframe引入的jsp页面中的值
    spring事务管理
    mysql中将多行数据合并成一行数据
    C语言字符串格式化输出
    gdb无法单步调试
    Linux系统glibc库版本信息查看
    gcc编译命令行依赖库的指定顺序
    HDFS的基础与操作
    搭建Kubernetes容器集群管理系统
    如何在 CentOS 里下载 RPM 包及其所有依赖包
  • 原文地址:https://www.cnblogs.com/jkxsz2333/p/9507818.html
Copyright © 2011-2022 走看看