반응형
Queue를 이용한 미로찾기 예제입니다.
1. "1"로만 이동 가능하고, 0은 이동 불가
1,1,0,0,0
0,1,1,1,1
0,0,1,1,1
0,0,0,0,1
2. 시작 (0,0)을 1로 할 때, (3,4)에서 탈출하면, 최단경로는 8.
3. 코드
#include <iostream>
#include <queue>
#include <vector>
using namespace std;
vector<vector<int>> ans;
void solution(vector<vector<int>> maze) {
int dx[4] = {-1,1,0,0};
int dy[4] = {0,0,-1,1};
ans[0][0] = 1;
queue<int> x;
queue<int> y;
x.push(0);
y.push(0);
int row, col;
while (!x.empty()) {
row = x.front();
col = y.front();
x.pop();
y.pop();
for (int i = 0; i < 4; i++) {
int nx = row + dx[i];
int ny = col + dy[i];
if (nx < 0 || nx >= ans.size() || ny < 0 || ny >= ans[0].size())
{
continue;
}
if (maze[nx][ny] == 1) {
x.push(nx);
y.push(ny);
maze[nx][ny] = 0;
}
else {
continue;
}
ans[nx][ny] = ans[row][col] + 1;
cout << ans[nx][ny] << endl;
}
}
}
int main() {
vector<vector<int>> maze = { {1,1,0,0,0},{0,1,1,1,1},{0,0,1,1,1},{0,0,0,0,1} };
vector<vector<int>> tmp(maze.size(), vector<int>(maze[0].size(), 0));
ans = tmp;
solution(maze);
return 0;
}
반응형
'공부 > C++' 카테고리의 다른 글
13. C++ Reference, 참조 (0) | 2022.01.27 |
---|---|
C++ 변수 선언 (uniform initialization), preventing narrow (0) | 2022.01.04 |
11. 타겟넘버, BFS, 너비우선탐색 (0) | 2021.09.13 |
10. C++ 타겟넘버, DFS, 깊이우선탐색 (0) | 2021.09.08 |
8. C++ 동적프로그래밍, 재귀, Top Down, Bottom Up, 피보나치 (0) | 2021.08.19 |
7. C++ 오름차순 정렬 (vector, sort, ascending, descending) (0) | 2021.08.19 |
6. C++ string 크기 비교 2 (compare, cmp) (0) | 2021.08.19 |
5. C++ string 크기 비교 (compare, cmp) (0) | 2021.08.19 |