hdu1285确定比赛名次

题目(http://acm.hdu.edu.cn/showproblem.php?pid=1285)
第一次做拓扑排序,照着网上的模板来敲得。

#include <iostream>
#include <string.h>
using namespace std;
const int maxn=501;
int map[maxn][maxn]; //存储图的临界阵 
int indegree[maxn];//存储点的入度 
int main()
{int m,n;
 int a,b;
 while(cin>>n>>m)
 {
   memset(map,0,sizeof(map));
   memset(indegree,0,sizeof(indegree));
   for(int i=0;i<m;i++)
   {
      cin>>a>>b;
      if(!map[a][b])//此处别忘了重边的判断,否则会wa 
      {
         map[a][b]=1;
         indegree[b]++; //重边的时候,如果不做处理,度数为计算错误
      }
   }
   for(int i=1;i<n+1;i++)//进行n次遍历,每次找出一个入度为0的节点
   {
      for(int j=1;j<n+1;j++)//遍历所有节点 
      {
         if(indegree[j]==0)//找出入度为0的节点
         {
            indegree[j]--;//度数递减,避免下次继续找到 
            if(i!=n)
            cout<<j<<" ";
            else
            cout<<j<<endl;
       for(int k=1;k<n+1;k++) // 删除与度数为0的节点相关联的边 
       {
           if(map[j][k]==1)
           indegree[k]--;
       }
       break;
         }
      }
    }
 }

    return 0;
}

你可能感兴趣的:(hdu1285确定比赛名次)