[BaekJoon] 백준 2178번 미로탐색
문제: https://www.acmicpc.net/problem/2178
내코드
- 시작점으로부터 거리를 측정해야하는 전형적인 bfs로 풀면 되는 문제
- scanf_s를 visual studio에서 썼는데 백준에서는 scanf를 써서 풀었다.
- 무한대라는 의미에서 math.h를 include해서 INFINIFY를 써줬는데 0으로 출력되서 int 범위의 최대값인 2147483647을 초기 최소값으로 입력해줬다.
- dist를 저장하기 위해 queue에 값을 저장할때 이중 pair를 써줬다.
- 아래는 풀이를 위해 아이패드에 정리한 내용
#include <iostream>
#include <stdio.h>
#include <string>
#include <queue>
#include <utility>
using namespace std;
int n, m, minDist = 2147483647;
int** arr;
bool** visited;
queue<pair<pair<int, int>, int>> qu;
int isNear(int p, int q, int dist) {
if (p < 0 || q < 0 || p >= n || q >= m) return 0;
if (arr[p][q] == 1 && visited[p][q] == false) {
qu.push(make_pair(make_pair(p, q), dist + 1));
visited[p][q] = true;
return 1;
}
return 0;
}
int main(void)
{
cin.tie(0);
cin >> n >> m;
arr = new int* [n];
for (int i = 0; i < n; i++) {
arr[i] = new int[m];
}
visited = new bool* [n];
for (int i = 0; i < n; i++) {
visited[i] = new bool[m];
}
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
scanf("%1d", &arr[i][j]);
visited[i][j] = false;
}
}
qu.push(make_pair(make_pair(0, 0), 1));
visited[0][0] = true;
while (!qu.empty()) {
pair<pair<int, int>, int> cur = qu.front();
qu.pop();
int p = cur.first.first;
int q = cur.first.second;
int dist = cur.second;
isNear(p, q - 1, dist);
isNear(p - 1, q, dist);
isNear(p, q + 1, dist);
isNear(p + 1, q, dist);
if (cur.first == make_pair(n - 1, m - 1)) {
if (minDist > dist) {
minDist = dist;
}
}
}
cout << minDist;
return 0;
}
참고
728x90
반응형
'CS > Algorithm 문제' 카테고리의 다른 글
[BaekJoon] 백준 7576번 토마토 (0) | 2020.03.08 |
---|---|
[BaekJoon] 백준 1697번 숨바꼭질 (0) | 2020.02.28 |
[BaekJoon] 백준 1926번 그림 (0) | 2020.02.21 |
[BaekJoon]백준 2493번 탑 (0) | 2020.01.28 |
[Baekjoon]백준 2504번 괄호의 값 (0) | 2020.01.23 |