uva 10305(拓扑)

来源:互联网 发布:矩阵范数 编辑:程序博客网 时间:2024/06/06 18:53

题解:大意是给出多组任务的优先顺序,然后输出所有任务的优先顺序,典型拓扑排序,是个有向无环图,深搜解决。


#include <stdio.h>#include <string.h>const int N = 100 + 5;int n, m, g[N][N], topo[N], vis[N], t;void init() {memset(g, 0, sizeof(g));memset(vis, 0, sizeof(vis));memset(topo, 0, sizeof(topo));}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;//表示已访问topo[t--] = u;return true;}bool toposort() {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)) {init();while (m--) {scanf("%d%d", &v1, &v2);g[v1][v2] = 1;}toposort();for (int i = 1; i <= n - 1; i++)printf("%d ", topo[i]);printf("%d\n", topo[n]);}return 0;}


0 0