www.acmicpc.net/problem/2178

 

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

+ Recent posts