首页 > 代码库 > poj-2367-拓扑排序-水
poj-2367-拓扑排序-水
今天重温了一下拓扑排序,做道水题开个头。思路就不写了,很暴力。
AC代码:
1 #include <iostream> 2 #include <cstdio> 3 #include <queue> 4 #include <vector> 5 #include <cstring> 6 using namespace std; 7 int arr[109][109]; 8 bool vis[109], inq[109]; 9 int n;10 queue<int> anse;11 void init()12 {13 memset(vis, 0, sizeof(vis));14 memset(inq, 0, sizeof(inq));15 memset(arr, 0, sizeof(arr));16 int a;17 for(int i = 1; i <= n; i++) {18 while(scanf("%d", &a) && a ) {19 arr[i][a] = 1;20 vis[a] = 1;21 }22 }23 for(int i = 1; i <= n; i++) {24 if(!vis[i]) {25 anse.push(i);26 for(int j = 1; j <= n; j++) {27 arr[i][j] = 0;28 }29 inq[i] = 1;30 }31 }32 }33 void findhead()34 {35 for(int i = 1; i <= n; i++) {36 int flag = 0;37 if(!inq[i]) {38 for(int j = 1; j <= n; j++) {39 if(arr[j][i] == 1) { flag = 1; break;}40 }41 if(!flag) {42 anse.push(i);43 for(int j = 1; j <= n; j++) {44 arr[i][j] = 0;45 }46 inq[i] = 1;47 }48 }49 }50 }51 void work()52 {53 init();54 while(anse.size() < n) {55 findhead();56 }57 printf("%d", anse.front());58 anse.pop();59 while(!anse.empty()) {60 printf(" %d", anse.front());61 anse.pop();62 }63 printf("\n");64 }65 int main()66 {67 while(scanf("%d", &n) != EOF) work();68 return 0;69 }
poj-2367-拓扑排序-水
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。