Uva 10305. Ordering Tasks

 
 
 

思路:

因为是看笔记教到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

Day1: 开始学习演算法和资料结构的契机

近期面试掀起了一波考演算法的风气,就好像回到大学指考那样,老师说这题会考一定要记起来,因此掀起了一...

意外插曲Cortex-M55与Ethos-U55

https://www.ithome.com.tw/news/135770 文中提到 Cortex-...

[ Day 22 ] React 中的 State 管理 - Redux

今天进入到全新的篇章 Redux 了! Redux 是 React.js 中很常拿来作为状态管理使...

DAY 26 首页文章

终於跳脱 header 的部分来到了下面文章列表啦,总觉得光是上半部就做了好久,不知道完赛前能不能把...

环境配置(node/golang)(Day3)

接续上篇提到的内容,这篇提到的主要会是golang与react会需要的环境配置 小提醒 在下面会有提...