首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C++ >> C++ 入門

九度 OJ 1448 Legal or Not:拓撲排序判斷有向圖是否有環

     編輯:C++ 入門

九度 OJ 1448 Legal or Not:拓撲排序檢測環

題目大意

給定有向圖 n 點 m 邊,判斷是否存在環。輸出 Yes(有環)或 No(無環)。多組測資。

解法:Kahn 拓撲排序 (BFS)

  1. 計算每點入度。
  2. 將入度 0 點入佇列。
  3. 彈出點,對其出邊終點入度 -1,若變 0 入佇列。
  4. 計數輸出點數 cnt。若 cnt < n → 有環(Yes),否則 No。

完整程式碼(C++)

#include <bits/stdc++.h>
using namespace std;

int main() {
    int n, m;
    while (cin >> n >> m, n || m) {
        vector> g(n);
        vector indeg(n, 0);
        for (int i=0;i> u >> v;
            g[u].push_back(v);
            indeg[v]++;
        }
        queue q;
        for (int i=0;i

複雜度

  • 時間:O(n+m)。
  • 空間:O(n+m)。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved