SRM 608 D2 L3:BigOEasy,DFS

2014-11-24 08:46:03 · 作者: · 浏览: 0

看似复杂,其实只要判断图中是否有两个不同的环有至少一个相同的顶点。从不同的顶点出发进行DFS,判断出发点在几个环中。

代码:

#include 
  
   
#include 
   
     #include 
    
      #include 
     
       #include 
      
        #include 
       
         #include 
        
          #include 
         
           #include 
          
            #include
            #include 
            
              #include 
             
               #include 
              
                #include 
               
                 #include 
                
                  #include 
                 
                   using namespace std; #define CHECKTIME() printf(%.2lf , (double)clock() / CLOCKS_PER_SEC) /*************** Program Begin **********************/ bool visit[55]; int ct; int cur; class BigOEasy { public: vector 
                  
                    graph; int N; void DFS(int v) { visit[v] = true; for (int i = 0; i < N; i++) { if (graph[v][i] == 'Y') { if (visit[i]) { if (i == cur) { ++ct; } } else { DFS(i); } } } } string isBounded(vector 
                   
                     graph) { this->graph = graph; this->N = graph.size(); string res = Bounded; memset(visit, 0, sizeof(visit)); for (int i = 0; i < N; i++) { memset(visit, 0, sizeof(visit)); ct = 0; cur = i; DFS(i); if (ct > 1) { res = Unbounded; break; } } return res; } }; /************** Program End ************************/