SWexpertAcademy
7699. 수지의 수지 맞는 여행
먼지의삶
2019. 7. 20. 02:40
#include<iostream>
#include<cstdio>
#include<queue>
#include<vector>
#include<utility>
#include<stack>
using namespace std;
int tc;
char a[22][22];
bool d[40];
int r, c;
int dx[] = { 0,0,1,-1 };
int dy[] = { 1,-1,0,0 };
int MAX = 0;
void initial() {
for(int i = 0; i < 40; i++){
d[i] = false;
}
}
void dfs(int x, int y, int cnt) {
d[a[x][y] - 'A'] = 1;
for (int i = 0; i < 4; i++) {
int nx = x + dx[i];
int ny = y + dy[i];
if (1 <= nx && nx <= r && ny >= 1 && ny <= c && !d[a[nx][ny] - 'A']) {
dfs(nx, ny, cnt + 1);
}
}
d[a[x][y] - 'A'] = 0;
if (MAX < cnt) MAX = cnt;
}
int main() {
scanf("%d", &tc);
for (int z = 1; z <= tc; z++) {
cin >> r >> c;
for (int i = 1; i <= r; i++) {
for (int j = 1; j <= c; j++) {
cin >> a[i][j];
}
}
dfs(1, 1, 1);
printf("#%d %d\n", z, MAX);
MAX = 0;
}
}
최대한 빠르게 하려고 이것저것 include 하다가, 그냥 DFS로 방향 잡았다. BFS로는 풀수없을거같아서..
d[a[nx][ny] - 'A'] 이걸로 알파벳 방문여부 확인이 가능한걸 이제알았다...