因为是看笔记教到Kahn's Algorithm,直接练习题,所以没什麽思路不思路,直接按照算法实作。
#include <iostream>
#include <queue>
#define N 101
using namespace std;
int main(){
int n, m, u, v;
bool adj[N][N];
int ref[N];
while(cin >> n >> m) {
if (n==0 && m==0) break;
// 初始化
for (int i = 1; i <= n; i++)
for (int j = 1; j <= n; j++)
adj[i][j] = false;
for (int i = 1; i <= n; i++) ref[i] = 0;
// 输入
for (int i = 1; i <= m; i++) {
cin >> u >> v;
adj[u][v] = true;
}
for (int i = 1; i <= n; i++)
for (int j = 1; j <= n; j++)
if (adj[i][j]) ref[j]++;
// Kahn's Algorithm
deque<int> Q;
for (int i = 1; i <= n; i++)
if(!ref[i]) Q.push_back(i);
for (int i = 1; i <= n; i++) {
if (Q.empty()) break;
int s = Q.front(); Q.pop_front();
ref[s] = -1;
cout << s << " ";
for (int j = 1; j <= n; j++) {
bool flag = false;
if(adj[s][j]) {
ref[j]--;
flag = true;
}
if(!ref[j] && flag) Q.push_back(j);
}
}
cout << endl;
}
}
虽然说可以输出任意合理工作顺序,但实际上还是得看测资推合理的output
参考:
https://web.ntnu.edu.tw/~algo/DirectedAcyclicGraph.html
<<: Day8. 使用 Invision 搭建低精度互动原型
>>: [Day23] JavaScript 函式库 - React
近期面试掀起了一波考演算法的风气,就好像回到大学指考那样,老师说这题会考一定要记起来,因此掀起了一...
https://www.ithome.com.tw/news/135770 文中提到 Cortex-...
今天进入到全新的篇章 Redux 了! Redux 是 React.js 中很常拿来作为状态管理使...
终於跳脱 header 的部分来到了下面文章列表啦,总觉得光是上半部就做了好久,不知道完赛前能不能把...
接续上篇提到的内容,这篇提到的主要会是golang与react会需要的环境配置 小提醒 在下面会有提...