티스토리 뷰

알고리즘/BOJ

[백준] 1987 알파벳

세진짱 2019. 8. 27. 22:17

DFS+비트마스크를 이용해 풀 수 있다

이미 지나간 알파벳을 지나갈 수 없으므로 비트를 이용해 확인하자

DFS를 돌리며 비트를 이용해 확인하고 지나갈 때 추가하면 쉽게 답을찾을 수 있다!

 

소스코드

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
#include <iostream>
#include <algorithm>
using namespace std;
int n,m,ans;
char map[22][22];
bool check[22][22];
int dx[4]={0,0,-1,1};
int dy[4]={1,-1,0,0};
 
void dfs(int x,int y,int alpha,int dist){
    int num = map[x][y]-'A';
    if(alpha&(1<<num)) return;
     
    check[x][y]=true;
    alpha|=(1<<num);
 
    for(int i=0;i<4;i++){
        int nx = x+dx[i];
        int ny = y+dy[i];
        if(0<=nx && nx <&& 0<=ny && ny <m){
            if(!check[nx][ny]) dfs(nx,ny,alpha,dist+1);
        }
    }
    check[x][y]=false;
    ans = max(ans,dist);
}
 
int main(){
    freopen("input.txt","r",stdin);
    scanf(" %d %d",&n,&m);
    for(int i=0;i<n;i++){
        for(int j=0;j<m;j++){
            scanf(" %1c",&map[i][j]);
        }
    }
    dfs(0,0,0,1);
    printf("%d\n",ans);
}
http://colorscripter.com/info#e" target="_blank" style="color:#e5e5e5text-decoration:none">Colored by Color Scripter
 

'알고리즘 > BOJ' 카테고리의 다른 글

[백준] 5719 거의 최단 경로  (0) 2019.08.27
[백준] 17267 상남자  (0) 2019.08.27
[백준] 3649 로봇 프로젝트  (0) 2019.08.27
[백준] 3020 개똥벌레  (0) 2019.08.27
[백준] 2632 피자판매  (0) 2019.08.27
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2024/12   »
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
글 보관함