본문 바로가기
알고리즘/백준

[백준] 2137 c++

by 오오오니 2023. 4. 1.

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

 

2178번: 미로 탐색

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

www.acmicpc.net

 

풀이

입력이 빈칸없이 주어져서 string으로 받은 다음에 int로 한 칸씩 짤라서 넣어줘야한다.

bfs로 풀면 된다.
(1,1)에서 (N,M)까지 가는 최단 경로의 칸수를 출력하면 된다.
각 칸에다가 (1,1)에서 각 칸까지의 칸수를 저장하고 다음 칸에 +1해서 칸의 수를 저장했다.

#include<iostream>
#include<string>
#include<queue>
using namespace std;

int N, M;
int num[102][102];
int cnt;
void bfs(int yy, int xx)
{
	queue<pair<int, int>> q;
	q.push(make_pair(yy, xx));
	int dy[] = { 0,1,0,-1 };
	int dx[] = { 1,0,-1,0 };
	cnt++;
	while (!q.empty())
	{
		int y = q.front().first;
		int x = q.front().second;
		q.pop();
		
	
		for (int t = 0; t < 4; t++)
		{
			if (num[y + dy[t]][x + dx[t]] == 1)
			{
				q.push(make_pair(y + dy[t], x + dx[t]));
				num[y + dy[t]][x + dx[t]] = num[y][x] + 1;
				
			}
		}

	}
	

	
}

int main()
{
	cin >> N >> M;
	string tmp;
	for (int i = 1; i <= N; i++)
	{
		cin >> tmp;
		for (int j = 1; j <=M; j++)
		{
			num[i][j]=tmp[j-1]-'0';

		}
	}
	
	bfs(1, 1);
	cout << num[N][M];
	
}

 

'알고리즘 > 백준' 카테고리의 다른 글

[7569] 토마토 c++  (0) 2023.05.12
[백준] 1987 알파벳 c++  (0) 2023.04.16
[백준] 11404 플로이드 C++  (0) 2023.03.24
[백준] 1715 카드 정렬하기 c++  (1) 2023.01.28
[백준] 3078 좋은 친구 c++  (0) 2023.01.07