2178번: 미로 탐색
첫째 줄에 두 정수 N, M(2 ≤ N, M ≤ 100)이 주어진다. 다음 N개의 줄에는 M개의 정수로 미로가 주어진다. 각각의 수들은 붙어서 입력으로 주어진다.
www.acmicpc.net
코드 설명
bfs를 이용하여 map[][] 이 1일 때만 탐색하면서 기존 좌표에 +1을 해준다( ++을 하면 전부 증가하므로 오류)
도착 좌표에 도착하면 출력
입력이 빈칸이없기 때문에 string으로 받은 후 한 칸씩 int 형 변환하여 넣어주었다.
코드
#include<iostream>
#include<vector>
#include<queue>
using namespace std;
int map[101][101];
int N, M;
bool visited[101][101];
int dx[] = { -1,1,0,0 };
int dy[] = { 0,0,1,-1 };
void bfs(int y, int x) {
queue<pair<int, int>> q;
q.push({ y,x });
visited[y][x] = true;
while (!q.empty()) {
int y = q.front().first;
int x = q.front().second;
q.pop();
for (int i = 0; i < 4; i++) {
int ny = y + dy[i];
int nx = x + dx[i];
if (ny < 0 || nx < 0 || ny >= N || nx >= M) continue;
if (!visited[ny][nx] && map[ny][nx] == 1) {
map[ny][nx] = map[y][x]+1;
q.push({ ny,nx });
visited[ny][nx] = true;
}
}
}
}
int main() {
cin >> N >> M;
for (int y = 0; y < N; y++)
{
string abc;
cin >> abc;
for (int i = 0; i < abc.size(); i++) {
map[y][i] = abc[i] - '0';
}
}
bfs(0, 0);
cout << map[N - 1][M - 1];
return 0;
}
'알고리즘 공부 > 백준' 카테고리의 다른 글
[백준] 9663 N-Queen (C++) (0) | 2021.05.17 |
---|---|
[백준] 9935번 문자열 폭발 C++ (0) | 2021.05.16 |
[백준] 나이트의 이동(C++/7562번) (0) | 2021.05.06 |
[백준] 1로만들기 (C++/1463번) (0) | 2021.05.05 |
[백준] 촌수계산 (0) | 2021.05.04 |