Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <cstdio>
- #include<algorithm>
- #include<vector>
- using namespace std;
- int R, C, m=0;
- char a;
- int cnt = 0;
- char map[20][20];
- bool visited[20][20], al[26];
- vector<int> v;
- int dir[4][2] = { { -1,0 },{ 0,1 },{ 1,0 },{ 0,-1 } };
- void dfs(int x, int y, int cnt) {
- m = max(m, cnt);
- for (int i = 0; i < 4; i++) {
- int nx = x + dir[i][0];
- int ny = y + dir[i][1];
- if (0 <= nx && nx < R && 0 <= ny && ny < C) {
- if (visited[nx][ny] == false && al[(int)map[nx][ny] - 65] == false) {
- visited[nx][ny] = true;
- al[(int)map[nx][ny] - 65] = true;
- dfs(nx, ny, cnt+1);
- visited[nx][ny] = false;
- al[(int)map[nx][ny] - 65] = false; //백트래킹
- }
- }
- }
- }
- int main(void)
- {
- cin.tie(NULL);
- cout.tie(NULL);
- cin >> R >> C; //R:행의 개수, C:열의 개수
- for (int i = 0; i < R; i++) {
- for (int j = 0; j < C; j++) {
- cin >> a;
- map[i][j] = a;
- }
- }
- visited[0][0] = true;
- al[(int)map[0][0] - 65] = true;
- dfs(0, 0, 1);
- cout << m;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement