본문 바로가기
개발자/알고리즘

[BOJ] 1261번 알고스팟 -deque

by D , 2019. 10. 12.
반응형


#include < iostream>
#include < deque>

using namespace std;

int dis[101][101];
bool check[101][101];
int board[101][101];

int dy[4] = {-1,0,1,0};
int dx[4] = {0,-1,0,1};

int n,m;

void bfs(int y,int x){
    deque<pair< int,int>> q;
    q.push_front(make_pair(y,x));

    check[y][x] = true;
    dis[y][x] = 0;

    while(!q.empty()){
        y = q.front().first;
        x = q.front().second;
        q.pop_front();

        for(int dir=0;dir<4;dir++){
            int ny = y + dy[dir];
            int nx = x + dx[dir];

            if(ny<0 || nx<0 || ny>=n || nx>=m)
                continue;

            if(check[ny][nx] == false){
                check[ny][nx] = true;
                if(board[ny][nx] == 0){
                    q.push_front(make_pair(ny,nx));
                    dis[ny][nx] = dis[y][x];
                }else{
                    q.push_back(make_pair(ny,nx));
                    dis[ny][nx] = dis[y][x] + 1;
                }

            }

        }
    }

}

int main()
{
    cin>>m>>n;

    for(int i=0;i<n;i++){
        string temp;
        cin>>temp;
        for(int j=0;j<m;j++){
            if(temp[j] == '1')
                board[i][j] = 1;
            else
                board[i][j] = 0;
        }
    }

   /* for(int i=0;i<n;i++){
        for(int j=0;j<m;j++){
            cout<<board[i][j]<<" ";
        }
        cout<<endl;
    }*/

    bfs(0,0);

   cout<<dis[n-1][m-1]<<endl;



    return 0;
}

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

 

1261번: 알고스팟

첫째 줄에 미로의 크기를 나타내는 가로 크기 M, 세로 크기 N (1 ≤ N, M ≤ 100)이 주어진다. 다음 N개의 줄에는 미로의 상태를 나타내는 숫자 0과 1이 주어진다. 0은 빈 방을 의미하고, 1은 벽을 의미한다. (1, 1)과 (N, M)은 항상 뚫려있다.

www.acmicpc.net

 

반응형

'개발자 > 알고리즘' 카테고리의 다른 글

[BOJ] 1339번 단어수학  (0) 2019.10.13
[BOJ] 1748번 수 이어 쓰기1  (0) 2019.10.13
[BOJ] 13549번 숨바꼭질3  (0) 2019.10.11
[BOJ] 14226번 이모티콘  (0) 2019.10.08
[BOJ] 1697번 숨바꼭질  (0) 2019.10.07