![[BOJ] 2178 미로 탐색 (C++)](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdna%2FbHjX68%2FbtsPbMdKtMP%2FAAAAAAAAAAAAAAAAAAAAAJxBpkd2f1FnBVWRQ7P0AUqB2MImLpI2XJFNoQSAhQ63%2Fimg.png%3Fcredential%3DyqXZFxpELC7KVnFOS48ylbz2pIh7yKj8%26expires%3D1756652399%26allow_ip%3D%26allow_referer%3D%26signature%3DcvhfTUosMtAcEzKIxZTXnAYo79s%253D)
[BOJ] 2178 미로 탐색 (C++)PS/백준 알고리즘[BOJ]2025. 7. 9. 20:39
Table of Contents
728x90
반응형
문제
https://www.acmicpc.net/problem/2178
풀이
사실 이 문제는 BFS의 기본 문제입니다. BFS가 처음이신 분들은 이 문제를 예제삼아 알고리즘의 정당성을 공부하면 좋습니다.
행렬에서 특정 점까지의 최단 경로를 구하는 문제이다. BFS를 이용하면 특정 점까지의 최단 경로가 보장되므로 방문 가능한 좌표들을 중심으로 BFS를 수행하면 된다.
- que에 {0, 0}을 추가하여 시작점으로 설정
- 상하좌우를 확인하며 방문 가능한 경우(아래 조건 만족하는 경우)에 대해서만 방문 진행
- 방문 체크가 안되어 있어야 함
- 값이 0이 아니어야 함
- 범위 안에 존재해야 함
- que에서 꺼낸 현재 좌표가 {N-1, M-1}일 때까지 반복한다.
코드
#include<iostream>
#include<queue>
#define IN(Y, X) (Y < N && Y >= 0 && X < M && X >= 0)
#define FAST_IO cin.tie(0), cout.tie(0), ios_base::sync_with_stdio(0)
#define F first;
#define S second;
using namespace std;
typedef pair<int, int> PII;
int dy[4] = { 1, 0, -1, 0 };
int dx[4] = { 0, 1, 0, -1 };
int N, M;
int board[100][100];
bool visit[100][100];
queue<PII> que;
int bfs() {
que.push({ 0, 0 });
visit[0][0] = true;
while (!que.empty()) {
PII cur = que.front();
que.pop();
int cy = cur.F;
int cx = cur.S;
if (cy == N - 1 && cx == M - 1) return board[cy][cx];
for (int i = 0; i < 4; i++) {
int ny = cy + dy[i];
int nx = cx + dx[i];
if (board[ny][nx] == 1 && IN(ny, nx) && !visit[ny][nx]) {
board[ny][nx] = board[cy][cx] + 1; // cnt
visit[ny][nx] = true;
que.push({ ny, nx });
}
}
}
}
int main(void) {
FAST_IO;
cin >> N >> M;
for (int i = 0; i < N; i++) {
string line;
cin >> line;
for (int j = 0; j < line.size(); j++) {
board[i][j] = line[j] - '0';
}
}
cout << bfs();
return 0;
}
728x90
반응형
'PS > 백준 알고리즘[BOJ]' 카테고리의 다른 글
[백준 30237] 합집합 (c++) Codeforces Round 899 (Div. 2) B번 (0) | 2024.04.30 |
---|---|
[백준 1562] 계단수 (C++) (0) | 2024.04.19 |
[백준 10844] 쉬운 계단 수 (C++) (0) | 2024.04.18 |
[백준 1043] 거짓말 (C++) (0) | 2024.04.08 |
[백준 11399] ATM (C++) (0) | 2024.03.20 |
@BE_개발자 :: 경이로운 개발일기
경이로운 BE 개발자가 되기 위한 프로그래밍 공부 기록장
도움이 되었다면 "❤️" 또는 "👍🏻" 해주세요! 문의는 아래 이메일로 보내주세요.