[백준] 2178 미로탐색

Dragony·2020년 1월 8일
0

코딩테스트

목록 보기
6/29

백준 2178 미로탐색 바로가기

C++ 코드


#include<iostream>
#include<cstdio>
#include<queue>
#define MAXV 101
using namespace std;
int N, M;

char map[MAXV][MAXV] = { 0 };
int visit[MAXV][MAXV] = { 0 };
int dir[4][2] = { {1,0},{-1,0},{0,1},{0,-1} }; //(y,x) 위,아래,오른쪽,왼쪽


int isInside(int a, int b) {
	return (a >= 0 && a < N) && (b >= 0 && b < M);
}


int bfs() {
	int cur_y = 0, cur_x = 0;

	queue<pair<int, int>> q;
	q.push(pair<int, int>(cur_y, cur_x));
	visit[cur_y][cur_x] = 1;

	while (!q.empty()) {
		
		//큐의 가장 앞에 있는 노드를 pop
		cur_y = q.front().first;
		cur_x = q.front().second;
		q.pop();

		//현재 노드에 인접한 모든 노드들(상 하 좌 우)
		for (int i = 0; i < 4; i++) { //4방향 순회, up down left right
			int next_y = cur_y + dir[i][0];
			int next_x = cur_x + dir[i][1];

			//해당 점이 맵 내부에 있고, 방문한 적 없고, 길인지(1인지)
			if (isInside(next_y, next_x) && visit[next_y][next_x] == 0 && map[next_y][next_x] == '1') {
				visit[next_y][next_x] = visit[cur_y][cur_x] + 1;
				q.push(pair<int, int>(next_y, next_x));
			}
		}
	}

	return visit[N - 1][M - 1];

}

int main() {

	scanf("%d %d", &N, &M);

	for (int i = 0; i < N; i++) {
		cin >> map[i];
	}
	
	int result = bfs();
	cout << result << endl;

	return 0;
}

profile
안녕하세요 :) 제 개인 공부 정리 블로그입니다. 틀린 내용 수정, 피드백 환영합니다.

0개의 댓글