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']  이걸로 알파벳 방문여부 확인이 가능한걸 이제알았다...