这么水的拓扑排序竟然会超时啊、、哭了啊、变量在里面定义的竟然超时了啊、、拿出来就对了啊,还有啊,这个得判重边啊、、一定要判啊!
#include <stdio.h>
#include <string.h>
#include <iostream>
#define N 550
#define M 2100
using namespace std;
int map[N][N], in[M], f[M];
int main()
{
int i, j, t, n, m, a, b, num;
while(~scanf("%d %d",&n, &m))
{
memset(map , 0 , sizeof(map));
memset(in , 0 , sizeof(in));
while(m--)
{
scanf("%d %d",&a, &b);
if(map[a][b] == 0)
{
map[a][b] = 1;
in[b]++;
}
}
num = 0;
while(num != n)
{
for(i = 1; i <= n; i++)
if(in[i] == 0)
{
in[i] = -1;
f[num++] = i;
t = i;
break;
}
for(j = 1; j <= n; j++)
if(map[t][j] == 1)
in[j]--;
}
for(i = 0; i < n-1; i++)
printf("%d ",f[i]);
printf("%d\n",f[n-1]);
}
return 0;
}