zoukankan      html  css  js  c++  java
  • hdu1285确定比赛名次<拓扑排序>

    链接: http://acm.hdu.edu.cn/showproblem.php?pid=1285

    拓扑排序是对有向无环图的一种排序。表示了顶点按边的方向出现的先后顺序。如果有环,则无法表示两个顶点的先后顺序。

    拓扑排序方法如下:

      (1)从有向图中选择一个没有前驱(即入度为0)的顶点并且输出它.

      (2)从网中删去该顶点,并且删去从该顶点发出的全部有向边.

      (3)重复上述两步,直到剩余的网中不再存在没有前趋的顶点为止.

    View Code
     1 #include <stdio.h>
     2 #include <string.h>
     3 int map[501][501], v[501], in[501], M, N;
     4 void Init( )
     5 {
     6     memset( map, 0, sizeof map );
     7     memset( in, 0, sizeof in );
     8     memset( v, 0, sizeof v );
     9     int a, b;
    10     for(int i=0; i<M; ++ i  ){
    11         scanf("%d%d", &a, &b);
    12         if(!map[a][b]){  //判断是否重边 
    13             map[a][b]=1;
    14             in[b]++;   //入度 +1 
    15         }
    16     }
    17 }
    18 void Topsort(int top )
    19 {
    20     int i,flag;
    21     while( top<N ){
    22         for( i=1; i<=N; ++ i){
    23             if( !v[i]&&in[i]==0 )
    24                 break;
    25         }
    26         if( i>N && top<N ){
    27             flag=1;  //成环  本题没有成环 
    28             break;
    29         }
    30         top++;
    31         v[i]=1;
    32         printf( top==N?"%d\n":"%d ", i );
    33         for( int j=1; j<=N; ++ j ){  //与i相连的j入度 -1; 
    34             if( map[i][j]&& in[j] )
    35                 in[j]--;
    36         }
    37     }
    38     
    39 }
    40 int main( )
    41 {
    42     while(scanf( "%d%d", &N, &M ) ==2 ){
    43         Init( );
    44         Topsort(0);    
    45     }
    46     return 0;
    47 }

     

  • 相关阅读:
    JS 循环遍历json
    客户端获取ip
    jquery 常用获取值得方法汇总
    C# MATLAB混合编程
    java设计模式之抽象工厂模式学习
    java设计模式之工厂模式学习
    java设计模式之装饰者模式学习
    本周任务
    模仿jquery的data
    js中random的应用
  • 原文地址:https://www.cnblogs.com/jian1573/p/2618010.html
Copyright © 2011-2022 走看看