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

    题目描述

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

    输入

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

    输出

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

    示例输入

    1 0
    2 2
    1 2
    2 1
    

    示例输出

    YES
    NO
     1 #include<stdio.h>
     2 #include<string.h>
     3 int map[11][11],vis[11],degree[11];
     4 int main()
     5 {
     6     int n,m,u,v,i,j,k;
     7     while(~scanf("%d %d",&n,&m))
     8     {
     9         memset(map,0,sizeof(map));
    10         memset(degree,0,sizeof(vis));//每个节点的入度初始为0;
    11         while(m--)
    12         {
    13             scanf("%d %d",&u,&v);
    14             map[u][v] = 1;
    15             degree[v]++;//v的入度加1;
    16         }
    17         int w,flag = 1;
    18         for( i = 1; i <= n; i++)
    19         {
    20             w = 0;//判断是否还有入度为0的点;
    21             for( j = 1; j <= n; j++)
    22             {
    23                 if(degree[j] == 0)
    24                 {
    25                     w = 1;//若存在入度为0的点,标记为1;
    26                     degree[j]--;//删除该顶点
    27                     for( k = 1; k <= n; k++)
    28                     {
    29                         if(map[j][k])
    30                             degree[k]--;
    31                     }//删除以该顶点为首的所有有向边,即入度减1;
    32                   break;
    33                 }
    34 
    35             }
    36             if(w == 0)//如果不存在前驱结点了,说明不存在合法拓扑排序;
    37             {
    38                 flag = 0;
    39                 break;
    40             }
    41         }
    42         if(flag)
    43             printf("YES
    ");
    44         else printf("NO
    ");
    45     }
    46     return 0;
    47 }
    View Code
  • 相关阅读:
    hdu 1392 凸包周长
    hdu 1847
    时间管理101招
    祝大家端午节快乐
    激励员工的二十种非经济手段
    Web2.0个人桌面
    回顾Windows系列的OEM版本历史
    什么是电子商务
    解析3G软件人才成功之道
    成功者应具备的八个心态
  • 原文地址:https://www.cnblogs.com/LK1994/p/3162490.html
Copyright © 2011-2022 走看看