728x90
https://www.acmicpc.net/problem/1987
재귀로 순열, 조합 풀듯이 풀었다. 방문한 뒤에 다시 visited를 false로 바꿔주었다. 한 번 방문했다고 다시 방문을 못하면 그것은 백트래킹이 아니라 DFS이기 때문이다.
#include <vector>
#include <algorithm>
#include <iostream>
#include <map>
using namespace std;
int dr[] = { 1, -1, 0, 0 };
int dc[] = { 0, 0, 1, -1 };
int n, m;
vector<vector<char>> v;
int maxNum = 0;
vector<bool> visited(26);
void dfs(int r, int c, int num) {
if (num> maxNum)
maxNum = num;
for (int i = 0; i < 4; i++) {
int row = r + dr[i];
int col = c + dc[i];
if (row >= n || col >= m || row < 0 || col < 0 || visited[v[row][col] - 'A'])
continue;
visited[v[row][col] - 'A'] = true;
dfs(row, col, num + 1);
visited[v[row][col] - 'A'] = false;
}
}
int main() {
cin.tie(NULL);
ios_base::sync_with_stdio(false);
cin >> n >> m;
v = vector<vector<char>>(n, vector<char>(m));
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
cin >> v[i][j];
}
}
visited[v[0][0] - 'A'] = true;
dfs(0, 0, 1);
cout << maxNum;
return 0;
}
728x90
'알고리즘 문제' 카테고리의 다른 글
[백준] 2023번 신기한 소수 (0) | 2020.09.01 |
---|---|
[백준] 10819번 차이를 최대로 (0) | 2020.08.31 |
[백준] 15683번 감시 (0) | 2020.08.30 |
[백준] 15686 치킨 배달 (0) | 2020.08.30 |
[백준] 2636 치즈 (0) | 2020.08.29 |