代码随想录算法【Day58】

117. 软件构建
通过输入文件依赖关系,构建一个有向图,然后使用广度优先搜索(BFS)来遍历图。每次选择一个入度为零的文件,将其加入结果集,并更新其指向文件的入度。最终,若所有文件都被访问过,则输出拓扑排序结果,否则输出-1

#include 
#include 
#include 
#include 
using namespace std;
int main() {
    int m, n, s, t;
    cin >> n >> m;
    vector inDegree(n, 0);

    unordered_map> umap;
    vector result;

    while (m--) {
        cin >> s >> t;
        inDegree[t]++;
        umap[s].push_back(t);
    }
    queue que;
    for (int i = 0; i < n; i++) {
        if (inDegree[i] == 0) que.push(i);
    }
    while (que.size()) {
        int cur = que.front();
        que.pop();
        result.push_back(cur);
        vector files = umap[cur];
        if (files.size()) {
            for (int i = 0; i < files.size(); i++) {
                inDegree[files[i]]--;
                if (inDegree[files[i]] == 0) que.push(files[i]);
            }
        }
    }
    if (result.size() == n) {
        for (int i = 0; i < n - 1; i++) cout << result[i] << " ";
        cout << result[n - 1];
    } else cout << -1 << endl;
}

你可能感兴趣的:(代码随想录算法,算法,c++,开发语言)