-
백준 - 알파벳 [1987]공부/baekjoon 문제 2019. 6. 13. 14:47
#include <iostream> #include <vector> #include <algorithm> #include <queue> using namespace std; vector<char> check; vector<int> fin; char arr[20][20]; int r, c; bool flag = false; bool visit[20][20]; void dfs(int i, int j, int cnt) { visit[i][j] = true; flag = false; if (i > 0 && !visit[i-1][j]) { for (int k = 0; k < (int)check.size(); k++) if (check[k] == arr[i - 1][j]) { flag = true; break; } if (!flag) { check.push_back(arr[i - 1][j]); dfs(i - 1, j, cnt+1); } flag = false; } if (j > 0 && !visit[i][j-1]) { for (int k = 0; k < (int)check.size(); k++) if (check[k] == arr[i][j - 1]) { flag = true; break; } if (!flag) { check.push_back(arr[i][j - 1]); dfs(i, j - 1, cnt + 1); } flag = false; } if (j < c - 1 && !visit[i][j+1]) { for (int k = 0; k < (int)check.size(); k++) if (check[k] == arr[i][j + 1]) { flag = true; break; } if (!flag) { check.push_back(arr[i][j + 1]); dfs(i, j + 1, cnt + 1); } flag = false; } if (i < r - 1 && !visit[i + 1][j]) { for (int k = 0; k < (int)check.size(); k++) if (check[k] == arr[i + 1][j]) { flag = true; break; } if (!flag) { check.push_back(arr[i + 1][j]); dfs(i + 1, j, cnt + 1); } flag = false; } if (cnt != 1) fin.push_back(cnt); visit[i][j] = false; check.pop_back(); } int main() { cin >> r >> c; for (int i = 0; i < r; i++) for (int j = 0; j < c; j++) cin >> arr[i][j]; check.push_back(arr[0][0]); dfs(0, 0, 1); sort(fin.begin(), fin.end(), greater<int>()); cout << fin[0]; return 0; }
'공부 > baekjoon 문제' 카테고리의 다른 글
백준 - 연산자 끼워넣기 [14888] (0) 2019.06.13 백준 - Puyo Puyo [11559] (0) 2019.06.13 백준 - 단지번호붙이기 [2667] (0) 2019.06.13 백준 - 바이러스 [2606] (0) 2019.06.13 해당 게시물들은 전부 기록을 위한 내용이며 주석 및 해석은 포함이 되어 있지 않습니다. (0) 2019.06.13