알고리즘/PS

[C++] 백준 1987 : 알파벳

BigmacGood 2022. 4. 26. 23:38

https://www.acmicpc.net/problem/1987

 

1987번: 알파벳

세로 R칸, 가로 C칸으로 된 표 모양의 보드가 있다. 보드의 각 칸에는 대문자 알파벳이 하나씩 적혀 있고, 좌측 상단 칸 (1행 1열) 에는 말이 놓여 있다. 말은 상하좌우로 인접한 네 칸 중의 한 칸으

www.acmicpc.net

백준 1987번 알파벳을 풀었다.

 

DFS와 백트래킹을 사용해서 풀었다.

 

아래는 전체 코드입니다.

#include <iostream>
#include <string>
#include <algorithm>
#include <vector>
using namespace std;


int dx[4] = { -1,0,1,0 };
int dy[4] = { 0,-1,0,1 };
char board[20][20];
int usedAlphabet[26];
int r, c;
int ans;

void DFS(int x, int y, int cnt) {
	if (ans < cnt)
		ans = cnt;
	for (int i = 0; i < 4; i++) {
		int next_x = x + dx[i];
		int next_y = y + dy[i];
		if (next_x >= 0 && next_x < r
			&& next_y >= 0 && next_y < c) {
			int temp = int(board[next_x][next_y]) - 65;
			if (usedAlphabet[temp] == 1) {

			}
			else {
				usedAlphabet[temp] = 1;
				DFS(next_x, next_y, cnt + 1);
				usedAlphabet[temp] = 0;
			}
		}
	}
}

int main() {
	cin >> r >> c;
	for (int i = 0; i < r; i++) {
		string str;
		cin >> str;
		for (int j = 0; j < str.size(); j++)
			board[i][j] = str[j];
	}


	usedAlphabet[int(board[0][0]) - 65] = 1;
	DFS(0, 0 , 1);

	cout << ans;

	return 0;
}