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


미로찾기입니다.

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
#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <queue>
 
using namespace std;
 
int way[104][104= { 0, };
int n, m;
int nowa, nowb;
queue<pair<int,int>> myq;
int cnt = 0;
bool isin(int a, int b) {
    if (a >= 0 && b >= 0 && a < m&&< n&&way[a][b] == 1)return true;
    else return false;
}
void bfs(int a, int b) {
    nowa = a;
    nowb = b;
    way[a][b] = 0;
    if (isin(a - 1, b)) {
        way[a - 1][b] = 0;
        myq.push(make_pair(a - 1, b));
    }
    if (isin(a + 1, b)) {
        way[a + 1][b] = 0;
        myq.push(make_pair(a + 1, b));
    }
    if (isin(a, b - 1)) {
        way[a][b - 1= 0;
        myq.push(make_pair(a , b-1));
    }
    if (isin(a, b + 1)) {
        way[a][b + 1= 0;
        myq.push(make_pair(a, b+1));
    }
 
}
int main() {
//freopen("test.txt", "r", stdin);
    cin >> n >> m;
    for (int i = 0; i < n; i++) {
        for (int j = 0; j < m; j++) {
            scanf("%1d"&way[j][i]);
        }
    }
    myq.push(make_pair(00));
    int qsize;
    while (!myq.empty()) {
        qsize = myq.size();
        for (int i = 0; i < qsize; i++) {
            bfs(myq.front().first,myq.front().second);
            myq.pop();
            if (nowb == n - 1 && nowa == m - 1) {
                cnt++;
                cout << cnt;
                return 0;
            }
        }
        cnt++;
        
        
    }
 
}
cs


'재미있는공부이야기 > 알고리듬' 카테고리의 다른 글

백준 14499번 주사위굴리기  (0) 2019.02.28
백준 7569번 토마토  (0) 2019.02.20
KMP 알고리즘  (0) 2019.02.15
3장. 문자열  (0) 2019.02.13
2장. 정렬  (0) 2019.02.09

+ Recent posts