拓扑排序经典题,dfs实现
题目链接:https://vjudge.net/problem/UVA-10305
代码:
#include <iostream>
#include <cstdio>
#include <vector>
#include <cstring>
using namespace std;
int ans[110];
int n,m;
vector<vector<int> > arr(110);
int c[110],t;
bool dfs(int u)
{
c[u] = -1;
for(int i = 0;i<arr[u].size();i++)
{
int v = arr[u][i];
if(c[v]<0)
return false;
else if(!c[v]&&!dfs(v))
return false;
}
c[u] = 1,ans[--t] = u;
return true;
}
bool toposort()
{
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()
{
while(scanf("%d%d",&n,&m)&&(n||m))
{
for(int i = 0;i<101;i++)
arr[i].clear();
for(int i = 0;i<m;i++)
{
int fr,to;
scanf("%d%d",&fr,&to);
arr[fr].push_back(to);
}
toposort();
for(int i = 0;i<n;i++)
{
printf("%d ",ans[i]);
}
printf("\n");
}
return 0;
}