题目大意:做一系列工作,但工作有顺序之分,比如必须完成A才能做B,要求为工作排序
解题思路:循环dfs
#include <stdio.h> #include <string.h> #include <iostream> using namespace std; int wo[110][110]; int flag[110]; int m, n; int all; void dfs(int a) { for(int i = 1; i <= m; i++) { if(wo[i][a] == 1 && flag[i] == 0) dfs(i); } printf("%d", a); flag[a] = 1; all++; if(all != m) printf(" "); } int main() { while(cin >> m && cin >> n && m + n != 0) { memset(flag, 0, sizeof(flag)); memset(wo, 0, sizeof(wo)); all = 0; while(n--) { int x, y; cin >> x >> y; wo[x][y] = 1; } for(int i = 1; i <= m; i++) { if(flag[i] == 0) dfs(i); } printf("\n"); } return 0; }