알고리즘

[백준/BFS/C++] 2178번 미로 탐색

데메즈 2022. 12. 30. 18:43
728x90
반응형

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

2178번: 미로 탐색

첫째 줄에 두 정수 N, M(2 ≤ N, M ≤ 100)이 주어진다. 다음 N개의 줄에는 M개의 정수로 미로가 주어진다. 각각의 수들은 붙어서 입력으로 주어진다.

www.acmicpc.net

bfs를 사용하여 풀었고
생각해보니 visited를 안쓰고

if(graph[nx][ny] != 0 && visited[nx][ny]==false)

조건 대신

if(graph[nx][ny] == 1)

조건을 썼어도 됐을 것 같다

#include <bits/stdc++.h>

using namespace std;

int n,m;
int graph[101][101];
bool visited[101][101];
int dx[] = {-1, 1, 0, 0};
int dy[] = {0, 0, -1, 1};

bool bfs(int x, int y){
    queue<pair<int, int>> q;
    q.push({x,y});
    visited[x][y] = true;

    while(!q.empty()){
        int first = q.front().first;
        int second = q.front().second;
        q.pop();

        for(int i=0; i<4; i++){
            int nx = first + dx[i];
            int ny = second + dy[i];

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

            if(graph[nx][ny] != 0 && visited[nx][ny]==false){
                graph[nx][ny] = graph[first][second] + 1;
                q.push({nx, ny});
                visited[nx][ny] = true;
            }
        }
    }
    return true;
}

int main(void) {

    cin >> n >> m;

    for(int i=0; i<n; i++){
        for(int j=0; j<m; j++){
            scanf("%1d", &graph[i][j]);
        }
    }
    bfs(0,0);

    cout << graph[n-1][m-1];

    return 0;
}

비슷한 문제
https://develop-me-z.tistory.com/99

[이코테/ DFS&BFS/ C++] 미로탈출

https://www.youtube.com/watch?v=7C9RgOcvkvo&list=PLRx0vPvlEmdAghTr5mXQxGpHjWqSz0dgC&index=4 #include using namespace std; int n, m; int graph[201][201]; // 이동할 네가지 방향 정의(상 하 좌 우) int dx[] = {-1, 1, 0, 0}; int dy[] = {0, 0, -1, 1

develop-me-z.tistory.com

728x90
반응형