看似复杂,其实只要判断图中是否有两个不同的环有至少一个相同的顶点。从不同的顶点出发进行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 ************************/