算法作業_44(2017.6.27第十九周)(算法機考模擬題4)

1004. 無環圖

Description

 

在圖論中,如果一個有向圖從任意頂點出發無法經過若干條邊回到該點,則這個圖是一個有向無環圖(Directed Acyclic Graph,DAG). 對於一個n個節點的有向圖(節點編號從0到n-1),請判斷其是否爲有向無環圖.
 
圖的節點數和邊數均不多於100000.
 
請爲下面的Solution類實現解決上述問題的isDAG函數,函數參數中n爲圖的節點數,edges是邊集,edges[i]表示第i條邊從edges[i].first指向edge[i].second. 如果是有向無環圖返回true,否則返回false.
 
class Solution {
public:
       bool isDAG(int n, vector<pair<int, int>>& edges) {
          
    }
};
 
例1:
n = 3,edges = {(0, 1), (0, 2)},函數應返回true.
 
例2:
n = 2,edges = {(0, 1), (1, 0)},函數應返回false.
 
注意:你只需要提交Solution類的代碼,你在本地可以編寫main函數測試程序,但不需要提交main函數的代碼. 注意不要修改類和函數的名稱.

#include<iostream>
#include<vector>
using namespace std;

class Solution {
public:
       bool isDAG(int n, vector<pair<int, int>>& edges) {
          vector<vector<int>> g(n,vector<int>(0));
          vector<int> visit(n,0);
          for(auto a :edges){
              g[a.first].push_back(a.second);
          }
          for(int i = 0 ;i<n; i++){
              if(!DFS(g,visit,i)) return false;
          }
          return true ;
    }
    
private:
       bool DFS(vector<vector<int>> &g ,vector<int> &visit , int i ){
           if(visit[i] == -1) return false ;
           if(visit[i] == 1) return true;
           
           visit[i]= -1;
           for(auto a :g[i]){
               if(!DFS(g,visit,a)) return false;
           }
           visit[i] = 1;
           return true ;
       }
};

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章