본문 바로가기
온라인저지

[BOJ] 2178번: 미로 탐색

by plzfday 2018. 8. 2.

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

4방향으로 BFS를 돌면 된다.

#include <cstdio>
#include <queue>
using namespace std;

const int dx[] = {-1, 1, 0, 0}, dy[] = {0, 0, -1, 1};
int n, m;
char a[102][102];
int vst[102][102];

struct ED
{
    int x, y;
    ED(int x, int y) : x(x), y(y) {}
};

int BFS(int x, int y)
{
    queue<ED> q;
    q.push(ED(x, y));
    vst[x][y] = 1;

    while (!q.empty())
    {
        int xx = q.front().x, yy = q.front().y;
        q.pop();

        if (xx == n - 1 && yy == m - 1)
            break;

        for (int i = 0; i < 4; ++i)
        {
            int nx = xx + dx[i], ny = yy + dy[i];
            if (0 <= nx && nx < n && 0 <= ny && ny < m && !vst[nx][ny] && a[nx][ny] == '1')
            {
                q.push(ED(nx, ny));
                vst[nx][ny] = vst[xx][yy] + 1;
            }
        }
    }

    return vst[n - 1][m - 1];
}

int main()
{
    scanf("%d %d", &n, &m);
    for (int i = 0; i < n; ++i)
        scanf("%s", a[i]);
    printf("%d\n", BFS(0, 0));
    return 0;
}

 

'온라인저지' 카테고리의 다른 글

[BOJ] 10250번: ACM 호텔  (0) 2018.08.04
[BOJ] 1967번: 트리의 지름  (0) 2018.08.02
[BOJ] 6603번: 로또  (0) 2018.08.02
[BOJ] 11383번: 뚊  (0) 2018.08.02
[BOJ] 4999번: 아!  (0) 2018.08.02
[BOJ] 1766번: 문제집  (0) 2018.07.27

댓글