관리 메뉴

기억을 위한 기록들

[백준 2178 : 미로 탐색] - C++ 본문

Coding Test - cpp/BFS

[백준 2178 : 미로 탐색] - C++

에드윈H 2021. 1. 13. 09:48

www.acmicpc.net/problem/2178

 

2178번: 미로 탐색

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

www.acmicpc.net

#include<iostream>
#include<string>
#include<vector>
#include<queue>
#include<string.h>
using namespace std;

int n,m;
vector<int> map[100];
int dis[100][100];
bool check[100][100];

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

int main() {

	memset(dis, 0, sizeof(dis));
	memset(check, false, sizeof(check));

	cin >> n>>m;

	string num;
	for (int i = 0; i < n; i++)
	{
		cin >> num;
		for (int j = 0; j < m; j++)
		{
			int a = num[j] - '0';
			map[i].push_back(a);
		}
	}


	queue<pair<int, int>> Q;
	Q.push({ 0, 0 });

	map[0][0] = 0;
	dis[0][0] = 1;


	while (!Q.empty())
	{
		int xx = Q.front().first;
		int yy = Q.front().second;
		Q.pop();

		for (int i = 0; i < 4; i++)
		{
			int nextX = xx + dx[i];
			int nextY = yy + dy[i];

			if(nextY<0 || m<=nextY || nextX<0 ||n<=nextX)
			{ 
				continue;
			}

			if (map[nextX][nextY] == 1 && !check[nextX][nextY])
			{
				check[nextX][nextY] = true;
				Q.push({ nextX,nextY });
				dis[nextX][nextY] = dis[xx][yy] + 1;
			}


		}
	}

	cout << dis[n - 1][m - 1] << endl;
	
	return 0;
}

'Coding Test - cpp > BFS' 카테고리의 다른 글

[백준 1697: 숨바꼭질] - C++  (0) 2021.01.14
[백준 7576: 토마토] - C++  (0) 2021.01.13
[백준 1012 : 유기농 배추] - C++  (0) 2021.01.12
[백준 2667 : 단지번호 붙이기] - C++  (0) 2021.01.12
송아지찾기(BFS)  (0) 2021.01.08