Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 | 31 |
Tags
- 인덱스 트리
- DP
- 프로그래머스
- BFS
- 백트래킹
- 투포인터
- 알고리즘
- C++1967
- C++ 1918
- 조합
- strtok
- C++ 1937
- 가장 긴 증가하는 부분 수열
- 다익스트라
- 소트 게임
- DFS
- C++ 17071
- Backtracking
- 16933
- C++
- 문자열
- C++1167
- 순열
- 백준 17071
- 위상정렬
- c언어
- 백준
- 백준 숨바꼭질5
- 조합론
- LIS
Archives
- Today
- Total
블로그
[C++] 2178: 미로탐색 본문
728x90
실버 Ⅰ
#include <iostream>
#include <queue>
using namespace std;
int N, M;
int map[100][100];
bool visit[100][100];
int didj[4][2] = { {0, 1}, {0, -1}, {1, 0}, {-1, 0} };
void bfs() {
queue<pair<int, int>> q;
q.push({ 0, 0 });
visit[0][0] = true;
while (!q.empty()) {
int cur_i = q.front().first;
int cur_j = q.front().second;
q.pop();
if (cur_i == N - 1 && cur_j == M - 1) return;
for (int k = 0; k < 4; k++) {
int new_i = cur_i + didj[k][0];
int new_j = cur_j + didj[k][1];
if (new_i < 0 || new_i >= N || new_j < 0 || new_j >= M) continue;
if (visit[new_i][new_j]) continue;
if (map[new_i][new_j] == 1) {
map[new_i][new_j] = map[cur_i][cur_j] + 1;
visit[new_i][new_j] = true;
q.push({ new_i, new_j });
}
}
}
}
int main() {
scanf("%d%d", &N, &M);
char row[101];
for (int i = 0; i < N; i++) {
scanf("%s", &row);
for (int j = 0; j < M; j++) {
map[i][j] = row[j] - '0';
}
}
bfs();
printf("%d", map[N - 1][M - 1]);
}
bfs 최단거리 기본
bfs 최단거리 경로 기본도 풀어볼 것~
가중치 없는 그래프에서의 최단경로(거리) -> bfs
'PS' 카테고리의 다른 글
[C++] 1697: 숨바꼭질 (0) | 2022.06.29 |
---|---|
cmp 함수 (0) | 2022.06.27 |
[C++] 11266: 단절점 (0) | 2022.06.18 |
[C++] 2559: 수열 (0) | 2022.06.17 |
[C++] 3273: 두 수의 합 (0) | 2022.06.17 |
Comments