题目大意:任务完成有先后,给定一些先后顺序,求一个任务序列
解题思路:拓扑排序题
有向无环图
读入数据存入邻接矩阵
利用dfs遍历
注意判断有环图
#include<iostream>
#include <cstdio>
#include <cstring>
using namespace std;
int n, m, g[105][105], tp[105], vis[105], t;
bool dfs(int u)
{
vis[u] = -1;//表示正在访问
for (int i = 1; i <= n; i++)
if (g[u][i])
{
if (vis[i] < 0)
return false;
else if (!vis[i] && !dfs(i))
return false;
}
vis[u] = 1;//表示已访问
tp[t--] = u;
return true;
}
bool tps()
{
t = n;
for (int i = 1; i <= n; i++)
if (!vis[i])
if (!dfs(i))
return false;
return true;
}
int main()
{
int v1, v2;
while (scanf("%d %d", &n, &m) && (m || n))
{
memset(g, 0, sizeof(g));
memset(vis, 0, sizeof(vis));
memset(tp, 0, sizeof(tp));
while (m--)
{
scanf("%d %d", &v1, &v2);
g[v1][v2] = 1;
}
tps();
for (int i = 1; i < n ; i++)
printf("%d ", tp[i]);
printf("%d\n", tp[n]);
}
return 0;
}