미로 탐색

BiBi·2021년 2월 8일
0

코딩테스트연습

목록 보기
66/66
#include <iostream>
#include <queue>
#include <stdio.h>
#include <string>
#include <cmath>
#include <algorithm>

int arr[101][101];
int d[101][101];
int visited[101][101];
int dx[4] = { 1,0,-1,0 };
int dy[4] = { 0,1,0,-1 };





int main() {
	int n, m;
	scanf("%d %d", &n, &m);
	std::queue<std::pair<int, int>> q;

	for (int i = 0;i < n;i++) {
		for (int j = 0;j < m;j++) {
			scanf("%1d", &arr[i][j]);
		}
	}
	q.push(std::make_pair(0, 0));
	while (!q.empty()) {
		int y = q.front().first;
		int x = q.front().second;
		q.pop();
		visited[y][x] = 1;
		if (y == n - 1 && x == m - 1) {
			
			break;
		}
		for (int i = 0;i < 4;i++) {
			int nx = x + dx[i];
			int ny = y + dy[i];
			if (nx >= 0 && nx < m && ny >= 0 && ny < n) {
				if (arr[ny][nx] == 1 && d[ny][nx]==0 && visited[ny][nx] == 0) {
					q.push(std::make_pair(ny, nx));
					visited[ny][nx] = 1;
					d[ny][nx] = d[y][x] + 1;
				}
			}
		}

	}
	printf("%d", d[n - 1][m - 1] + 1);
	
}
profile
Server Network Engineer

0개의 댓글