http://acm.hdu.edu.cn/showproblem.php?pid=1285
题意:是通过已知的比赛结果,判断名次。
1.用邻接矩阵存储
2.用一个一维数组存储当前点的入度。当该点的入度是0时,输出该点,并将与他相连的点的度数减一。寻找下一个读数为0的点。。。。。
#include<cmath> #include<cstring> #include<iostream> using namespace std; int G[505][505],a,b; int in[505],vis[505],n,m; int main(){ while(~scanf("%d%d",&n,&m)&&n+m){ for(int i=1;i<=n;i++){ for(int j=1;j<=n;j++){ G[i][j]=0; } } memset(in,0,sizeof(in)); memset(vis,0,sizeof(vis)); for(int i=0;i<m;i++){ scanf("%d%d",&a,&b); G[a][b]=1; } for(int i=1;i<=n;i++){ for(int j=1;j<=n;j++){ if(G[i][j]==1){ in[j]++; } } } int first=1; for(int i=1;i<=n;i++){ int u; for(int j=1;j<=n;j++){ if(!in[j]&&!vis[j]){ vis[j]=1; u=j; break; } } if(first){ printf("%d",u); first=0; }else{ printf(" %d",u); } for(int j=1;j<=n;j++){ if(G[u][j]==1){ G[u][j]=0; in[j]--; } } } printf("\n"); } return 0; }
时间: 2024-11-17 12:16:27