으헝헝 .. dictionary 질문드려봐요 ㅠㅠ skan1543 전체적인 아이디어는 책하고 비슷합니다아.. DFS를 돌면서 가장 먼저 DFS가 종료되는 노드들을 스택에 추가하고.. 모든 DFS가 종료되었을때 역순으로 출력해줬는데요. 사이클의 경우엔, 경로들을 비트마스크 하여.. DFS의 인자로 전달해서 . 현재 노드에서 갈 수 있는 노드중에, 이미 지나온 노드가 있다면 사이클이 있다고 판단하였습니다. 어디가 문제인지 조금만 봐주시면 감사하겠습니다. (_ _) #include<stdio.h> #include<vector> #include<string.h> #include<string> #include<stack> using namespace std; bool check[30][30]; bool visited[30]; stack<int> pathh; bool DFS(int now, int path) { visited[now] = true; path += (1 << now); for (int i = 0; i < 26; i++) { if (check[now][i] == 1 && (path &(1 << i))>0) return false; else if (check[now][i] == 1 && visited[i] == false) if (DFS(i, path)== false) return false; } pathh.push(now); return true; } int main() { freopen("input.txt", "r", stdin); int t; scanf("%d", &t); while (t--) { for (int i = 0; i < 30; i++) { visited[i] = 0; for (int j = 0; j < 30; j++) check[i][j] = 0; } int n; scanf("%d", &n); char temp[1001][30]; for (int i = 0; i < n; i++) scanf("%s", temp[i]); for (int i = 0; i < n - 1; i++) { int idx = 0; while (idx < strlen(temp[i]) && idx < strlen(temp[i + 1])) { if (temp[i][idx] == temp[i + 1][idx]) idx++; else { check[temp[i][idx] - 'a'][temp[i + 1][idx] - 'a'] = 1; break; } } } vector<int> canstart; for (int i = 0; i < 26; i++) { int j,l=0; for (j = 0; j < 26; j++) { if (check[i][j] == 1) l++; if (check[j][i] == 1) break; } if (j == 26 && l!=0) canstart.push_back(i); } if (canstart.empty()){ printf("INVALID HYPOTHESIS\n"); continue; } int i; for (i = 0; i < canstart.size(); i++) if (DFS(canstart[i], 0) == false) break; if (i != canstart.size()) { printf("INVALID HYPOTHESIS\n"); continue; } while (!pathh.empty()) { printf("%c", pathh.top() + 'a'); pathh.pop(); } for (int i = 0; i < 26; i++) if (!visited[i]) printf("%c", i + 'a'); printf("\n"); } return 0; } 8년 전
0개의 댓글이 있습니다. 정회원 권한이 있어야 커멘트를 다실 수 있습니다. 정회원이 되시려면 온라인 저지에서 5문제 이상을 푸시고, 가입 후 7일 이상이 지나셔야 합니다. 현재 문제를 푸셨습니다.
skan1543
전체적인 아이디어는 책하고 비슷합니다아..
DFS를 돌면서 가장 먼저 DFS가 종료되는 노드들을 스택에 추가하고.. 모든 DFS가 종료되었을때 역순으로 출력해줬는데요.
사이클의 경우엔, 경로들을 비트마스크 하여.. DFS의 인자로 전달해서 . 현재 노드에서 갈 수 있는 노드중에, 이미 지나온 노드가 있다면 사이클이 있다고 판단하였습니다.
어디가 문제인지 조금만 봐주시면 감사하겠습니다. (_ _)
8년 전