题意:
对于给定的关系,输出可能的序列,就是拓扑排序。
输入结束的标志并不是0&& 0,而是0||0,这是一个坑;
#include<iostream>
#include<cstring>
using namespace std;
int c[105],out[105];
int ma[105][105];
int m,n,t;
bool dfs(int u){
c[u]=-1;
for(int i=1;i<=n;i++)
if(ma[u][i]) {
if(c[i]<0) return false;
if(!c[i]&&!dfs(i)) return false;
}
c[u]=1;
out[--t]=u;
return true;
}
bool ju()
{
t=n;
memset(c,0,sizeof(c));
for(int i=1;i<=n;i++)
if(!c[i])
if(!dfs(i)) return false;
return true;
}
int main(){
int a,b;
while(cin>>n>>m&& (n || m )){
memset(ma,0,sizeof(ma));
for(int i=0;i<m;i++){
cin>>a>>b;
ma[a][b]=1;
}
ju();
int flag=0;
for(int te=0;te<n;te++){
if(flag++) cout<<' ';
cout<<out[te];
}
cout<<endl;
}
return 0;
}
\