DFS 문제.
방문한 알파벳을 체크하면서 나아가면 된다.
ps. check 배열과 v 배열을 합쳐서 하나의 배열로 표현하였으면 더 깔끔하지 않았을까싶다.
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
|
#include <iostream>
#define visited true
#define Non_visited false
#define MAX 21
using namespace std;
int R,C;
char board[MAX][MAX];
int check[27];
bool v[MAX][MAX];
int xx[4]={1,0,-1,0};
int yy[4]={0,1,0,-1};
int ans;
void solved(int x, int y, int cnt){
if(v[x][y]==visited) return;
v[x][y]=visited;
for(int i=0;i<4;i++){
int nx=x+xx[i];
int ny=y+yy[i];
if(nx<0 || ny<0 || nx>=R || ny>=C) continue;
if(check[board[nx][ny]-'A']!=1){
check[board[nx][ny]-'A']=1;
solved(nx,ny,cnt+1);
check[board[nx][ny]-'A']=0;
v[nx][ny]=Non_visited;
}
}
ans=max(ans,cnt);
}
int main(){
cin >> R >> C;
for(int i=0;i<R;i++){
for(int j=0;j<C;j++){
cin >> board[i][j];
}
}
check[board[0][0]-'A']=1;
solved(0,0,1);
cout << ans << endl;
}
|
cs |
'Coding > 백준' 카테고리의 다른 글
| 1120번 문자열 (0) | 2020.06.15 |
|---|---|
| 2042번 구간 합 구하기 (0) | 2020.06.09 |
| 10448번 유레카 이론 (0) | 2020.05.04 |
| 2206번 벽 부수고 이동하기 (0) | 2020.04.24 |
| 1182번 부분수열의 합 (0) | 2020.04.20 |