描述:完全是刘汝佳书上的拓扑排序,一点都没有变化,不过可能测试样例的输出与自己测试输出不一样,不过没有事,只要满足一种符合条件的输出就可以
#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
int flag,n,m;
int topo[110],num[110],s[110][110];
bool dfs(int site)
{
num[site]=-1;
for(int i=1; i<=n; i++)
if(s[site][i]&&(num[i]<0||(!num[i]&&!dfs(i)))) return false;
num[site]=1;
topo[--flag]=site;
return true;
}
bool toposort()
{
flag=n;
memset(num,0,sizeof(num));
for(int i=1; i<=n; i++)
if(!num[i]&&!dfs(i)) return false;
return true;
}
int main()
{
//freopen("a.txt","r",stdin);
int x,y,count;
while(scanf("%d%d",&n,&m)!=EOF)
{
if(!n&&!m) break;
memset(s,0,sizeof(s));
for(count=0; count<m; count++)
{
scanf("%d%d",&x,&y);
s[x][y]=1;
}
if(toposort())
for(count=0; count<n-1; count++) printf("%d ",topo[count]);
printf("%d\n",topo[count]);
}
return 0;
}
10305 - Ordering Tasks
最新推荐文章于 2023-12-14 17:47:09 发布