Dolphins의 HelloWorld

[백준]Baekjoon1987(백 트래킹) 본문

Algorithm/baekjoon문제풀이

[백준]Baekjoon1987(백 트래킹)

돌핀's 2018. 10. 4. 20:32

문제링크 : https://www.acmicpc.net/problem/1987



풀이



DFS를 통해 해결할 수 있는 문제이다.


이 때 이미 지난 알파벳을 지나지 않도록 해야하는데 이를 위해서


map을 이용해 이미 밟은 알파벳에 대해 표시할 수 있도록하였다.


#include <iostream>
#include <string>
#include <map>
#include <algorithm>

using namespace std;

string arr[20];
bool check[20][20];

int move_x[] = { 1,-1,0,0 };
int move_y[] = { 0,0,-1,1 };

int r, c;
int result = 0;
map<char, int> m;
void dfs(int x, int y, int num)
{
	check[x][y] = true;
	num++;
	m[arr[x][y]]++;

	for (int i = 0; i < 4; i++)
	{
		int nx = x + move_x[i];
		int ny = y + move_y[i];
		if (nx >= 0 && nx < r && ny >= 0 && ny < c) {
			if (m[arr[nx][ny]] == 0)
			{
				dfs(nx, ny, num);
			}
		}
	}
	result = max(result, num);
	check[x][y] = false;
	m[arr[x][y]]--;
	num--;
}
int main()
{
	scanf("%d %d", &r, &c);

	for (int i = 0; i < r; i++)
	{
		cin >> arr[i];
	}
	dfs(0, 0, 0);
	cout << result << '\n';
}

'Algorithm > baekjoon문제풀이' 카테고리의 다른 글

[백준]Baekjoon3015(스택)  (0) 2018.10.12
[백준]Baekjoon3111(스택 or deque 활용)  (1) 2018.10.08
[백준]Baekjoon9663(백트래킹)  (0) 2018.10.01
[백준]Baekjoon9095(재귀)  (0) 2018.09.29
[백준]Baekjoon1525(queue)  (0) 2018.09.26
Comments