홍시홍의 프로그래밍

[백준 2589] 보물섬 본문

알고리즘 문제풀이/백준

[백준 2589] 보물섬

홍시홍 2018. 11. 22. 23:00

하루에 하나 알고리즘

누군가에게 조금이라도 도움이 됫으면 하는 바램으로 이 글을 작성합니다


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


풀이

dfs로 풀다가 왜 안풀리지 어떻게하면 분기점에서 다시 시작할 수 있을까 고민을 했는데 답이 안나왔습니다.

이미 ans의 최고 값은 돌아간 곳에서 정해졌으니깐요

그래서 bfs로 푸니깐 한번에 풀렸네요 ㅠㅠㅠㅠㅠ

기본저거인 bfs문제였습니다


소스코드 

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
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
#include<iostream>
#include<queue>
#include<string.h>
using namespace std;
int n, m;
int map[51][51];
int visit[51][51];
int dr[4= { -1,0,1,0 };
int dc[4= { 0,-1,0,1 };
int ans = 0;
queue<pair<intint>> q;
 
void dfs(int r, int c)
{
    q.push(make_pair(r, c));
    visit[r][c] = 1;
    while (!q.empty())
    {
        
        int x = q.front().first;
        int y = q.front().second;
        q.pop();
        if (ans < visit[x][y])
        {
            ans = visit[x][y];
 
        }
        for (int i = 0; i < 4; i++)
        {
            int nx = x + dr[i];
            int ny = y + dc[i];
            if (nx < 0 || nx >= n || ny < 0 || ny >= m)
                continue;
 
            if (map[nx][ny] == 0 && visit[nx][ny] == 0)
            {
                visit[nx][ny] = visit[x][y] + 1;
                q.push(make_pair(nx, ny));
            }
        }
    }
}
int main()
{
    cin >> n >> m; 
    for (int i = 0; i < n; i++)
    {
        for (int j = 0; j < m; j++)
        {
            char ch;
            cin >> ch;
            if (ch == 'W')
            {
                map[i][j] = 1;
            }
            else
                map[i][j] = 0;
        }
    }
 
    for (int i = 0; i < n; i++)
    {
        for (int j = 0; j < m; j++)
        {
            
            if (map[i][j] == 0)
            {
                memset(visit, 0sizeof(visit));
                visit[i][j] = 1;
                dfs(i, j);
 
        
            }
        }
    }
    cout << ans-1 << endl;
    return 0;
 
}
cs


'알고리즘 문제풀이 > 백준' 카테고리의 다른 글

[백준 17406] 배열돌리기 4  (0) 2019.08.13
[백준 14889] 스타트와 링크  (0) 2019.02.14
[백준 2178] 미로탐색  (0) 2018.11.20
[백준 1697] 숨바꼭질  (0) 2018.11.16
[백준 1260] dfs와 bfs  (0) 2018.11.14
Comments