본문 바로가기

Problem/BFS

[백준알고리즘] 2589번 보물섬

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






다른거 하기 싫어서 코딩문제 풀었다..

왤케 딴 거 하기 있을 때에는 문제 풀고 싶고 없을 때에는 문제가 안풀고 싶을까? ㅎ...


ㅠㅠ나는 너무 성급하게 코드를 제출해서 한 번에 성공을 잘 못하는 것 같다.. 충분히 생각해보고 제출하는 연습을 해야겠답.



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
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<string.h>
#include<iostream>
#include<queue>
using namespace std;
 
int v[51][51= { 0 };
int visited[51][51= { 0 };
 
int dx[4= { 0,0,-1,1 };
int dy[4= { 1,-1,0,0 };
queue <pair<intint>> q;
 
int main(void)
{
    int M, N;
    int max_count = 0;
    int count = 0;
    char path[50= { 0 };
 
    scanf("%d %d"&M, &N);
 
    for (int i = 0; i < M; i++)
    {
        scanf("%s", path);
        for (int j = 0; j < N; j++)
        {
            v[i][j] = *(path + j);
        }
    }
 
    for (int i = 0; i < M; i++)
    {
        for (int j = 0; j < N; j++)
        {
            if (v[i][j] == 'L')
            {
                visited[i][j] = 1;
                q.push(make_pair(i, j));
 
                while (!q.empty())
                {
                    int size = q.size();
 
                    while (size--)
                    {
                        int x = q.front().first;
                        int y = q.front().second;
 
                        q.pop();
 
                        for (int k = 0; k < 4; k++)
                        {
                            int mx = x + dx[k];
                            int my = y + dy[k];
 
                            if (mx >= 0 && mx < M && my >= 0 && my < N && v[mx][my] == 'L' && visited[mx][my] == 0)
                            {
                                visited[mx][my] = 1;
                                q.push(make_pair(mx, my));
                            }
                        }
                    }
                    count++;
                }
                if (max_count < count) max_count = count;
                count = 0;
            }
            memset(visited, 0sizeof(visited));
        }
    }
    printf("%d", max_count-1);
 
    return 0;
}
cs