简单的拓扑排序,入门练手
注意重边的情况
#include<stdio.h>
#include<math.h>
int main()
{
int n,m;
int a,b;
while(scanf("%d %d",&n,&m)!=EOF)
{
int map[555][555]={0},in[555]={0},top[555]={0};
for(int i=0;i<m;i++)
{
scanf("%d %d",&a,&b);
if(map[a][b]==0) //排除重边,不然in[b]会多加
{map[a][b]=1;
in[b]+=1;}
}
int q=1;
for(int i=1;i<=n;i++)
{
int k;
for(int j=1;j<=n;j++)
{
if(in[j]==0)
{
k=j;
in[j]=-1;
break;
}
}
top[q++]=k;
for(int j=1;j<=n;j++)
{
if(map[k][j]==1)
{
in[j]--;
}
}
}
for(int j=1;j<n;j++)
{
printf("%d ",top[j]);
}
printf("%d\n",top[n]);
}
return 0;
}
hdu提交的c++模式不知道为什么总是栈溢出,换成g++就好了,试了几个其他人写的,也都溢出...