Time Limit: 3000MS | Memory Limit: Unknown | 64bit IO Format: %lld & %llu |
Description
拓扑排序模板
#include <iostream>
#include <cstdio>
#include <cstring>
const int N = 110;
int visit[N];
int s[N][N];
void dfs();
int step, n, m;
int main()
{
while(scanf("%d %d", &n, &m),n!=0||m!=0)
{
memset(visit,0,sizeof(visit));
memset(s,0,sizeof(s));
for(int i=0;i<m;i++)
{
int x, y;
scanf("%d %d", &x, &y);
s[x][y]=1;
}
step=n;
dfs();
}
}
void dfs()
{
if(step<=0)
{
return ;
}
step--;
int f=1, x=0;
while(f)
{
x++;
if(visit[x]==0)
{
int y=0;
for(int i=1;i<=n;i++)
{
y=y+s[i][x];
if(y>0)
{
break;
}
}
f=y;
}
}
visit[x]=1;
for(int i=1;i<=n;i++)
{
s[x][i]=0;
}
if(step)
{
printf("%d ",x);
}
else
{
printf("%d\n",x);
}
dfs();
return ;
}