你这个结果不是按照字典序的,每找到一个就应该从头寻找
有重复的有向边,把重复的忽略就可以了 }
#include
using namespace std;
#define max 501
int arc[max][max];
int vis[max];
int in[max];
int p[max];
int c;
void topsort(int i,int n)
{
vis[i]=1;
p[c++]=i+1;
int j;
for (j=0; j
for(j=0;j
{
topsort(j,n);
break;
}
return;
}
int main()
{
int n,m;
while(cin>>n>>m)
{
c=0;
int x,y;
int i,j;
memset(arc,0,sizeof(arc));
memset(in,0,sizeof(in));
memset(vis,0,sizeof(vis));
for(i=0;i
cin>>x>>y;
if(arc[x-1][y-1]==0) // 如果此边没有被读过
{
arc[x-1][y-1]=1;
in[y-1]=in[y-1]+1;
}
}
for(i=0;i
{
topsort(i,n);
break;
}
for(i=0;i
return 0;
}