https://www.acmicpc.net/problem/1987
예전에 풀었는데 놀랍게도 풀이를 적지 않았나 보다..
DFS에 백트래킹을 섞어주면 된다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 | #include <cstdio> char board[21][21]; bool al[26]; int R, C, count = -987654321; const int dx[] = { -1, 1, 0, 0 }, dy[] = { 0, 0, -1, 1 }; bool is_safe(int y, int x) { return (0 <= y && y < R && 0 <= x && x < C); } void search(int y, int x, int cnt) { if (cnt > count) count = cnt; al[board[y][x] - 'A'] = true; for (int i = 0; i < 4; ++i) { int nextY = y + dy[i], nextX = x + dx[i]; if (is_safe(nextY, nextX) && !al[board[nextY][nextX] - 'A']) search(nextY, nextX, cnt + 1); } al[board[y][x] - 'A'] = false; } int main() { scanf("%d %d", &R, &C); for (int i = 0; i < R; ++i) scanf("%s", board[i]); search(0, 0, 1); printf("%d\n", count); return 0; } |
'온라인저지' 카테고리의 다른 글
[BOJ] 2440번: 별찍기 - 3 (0) | 2018.07.26 |
---|---|
[BOJ] 2441번: 별찍기 - 4 (0) | 2018.07.26 |
[BOJ] 2442번: 별찍기 - 5 (0) | 2018.07.26 |
[BOJ] 3034번: 앵그리 창영 (0) | 2018.07.26 |
[BOJ] 3035번: 스캐너 (0) | 2018.07.26 |
[BOJ] 3036번: 링 (0) | 2018.07.26 |
댓글