Exemplo n.º 1
0
int main() {
#ifdef Debug
    freopen("1572.in", "r", stdin);
#endif
    int n;
    char input[10];
    while (scanf("%d", &n) == 1 && n) {
        memset(G, 0, sizeof(G));
        while (n--) {
            scanf("%s", input);
            for (int i = 0; i < 4; ++i) {
                for (int j = 0; j < 4; ++j) {
                    if (i != j) {
                        connect(input[2*i], input[2*i+1], input[2*j], input[2*j+1]);
                    }
                }
            }
        }
        if (hasCircle()) {
            printf("unbounded\n");
        } else {
            printf("bounded\n");
        }
    }
    return 0;
}
Exemplo n.º 2
0
 bool hasCircle(vector<vector<int>>& graph, vector<bool>& inGraph, vector<bool>& visited, int current) {
     visited[current] = true;
     inGraph[current] = true;
     for(auto adj : graph[current]) {
         if(!visited[adj]) {
             if(hasCircle(graph, inGraph, visited, adj)) return true;
         } else if(inGraph[adj]) {
             return true;
         }
     }
     inGraph[current] = false;
     return false;
 }
Exemplo n.º 3
0
 bool canFinish(int numCourses, vector<pair<int, int>>& prerequisites) {
     vector<vector<int>> graph(numCourses, vector<int>());
     vector<bool> visited(numCourses, false);
     vector<bool> inGraph(numCourses, false);
     for(auto p : prerequisites) {
         graph[p.first].push_back(p.second);
     }
     for(int i=0; i<numCourses; i++) {
         if(!visited[i]) {
             if(hasCircle(graph, inGraph, visited, i)) return false;
         }
     }
     return true;
 }