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 |
Tags
- 분할축 이론
- 리눅스
- Vector
- Doubly Connected Edge List
- 보로노이다이어그램
- 유니티
- dp
- 다이나믹 프로그래밍
- 벡터
- C
- 충돌 알고리즘
- uclidean algorithm
- 문제풀이
- 외적
- SOH
- ubuntu
- Unity
- GJK
- C++
- 우분투
- c#
- Expanding Polytope Algorithm
- PS
- AABB
- Graham Scan
- linux
- 알고리즘
- 내적
- 백준
- 수학
Archives
- Today
- Total
마이 플밍 블로그
백준 2178 미로찾기 본문
BFS를 이용하는 문제
최단 거리를 구하라고 하길래 A* 알고리즘을 쓰라는 말인가?
싶었는데 그냥 BFS만 사용하면 되는 문제였다
#include<cstdio>
#include<iostream>
#include<queue>
#include <string>
using namespace std;
string arrstr[100];
int X,Y;
int map[101][101];
int mapScore[101][101] = { 0 };
int flag[101][101] = { 0 };
int dx[4] = { 0, 1, 0, -1 };
int dy[4] = { -1, 0, 1, 0 };
bool inside(int x, int y) {
if (0 <= x && x < X && 0 <= y && y < Y)
return true;
else
false;
}
void BFS(int x, int y) {
flag[x][y] = true;
queue<pair<int, int>> q;
q.push(make_pair(x, y));
while (!q.empty()) {
int qX = q.front().first;
int qY = q.front().second;
if (qX == X - 1 && qY == Y - 1) {
cout << mapScore[qX][qY] + 1;
return;
}
q.pop();
for (int i = 0; i < 4; i++) {
int CheckX = qX + dx[i];
int CheckY = qY + dy[i];
if (map[CheckX][CheckY] == 1 && flag[CheckX][CheckY] == false && inside(CheckX, CheckY)) {
mapScore[CheckX][CheckY] = mapScore[qX][qY] + 1;
flag[CheckX][CheckY] = true;
q.push(make_pair(CheckX, CheckY));
}
}
}
}
int main(void) {
int i;
cin >> X >> Y;
for (i = 0; i < X; i++) {
cin >> arrstr[i];
}
for (int x = 0; x < X; x++) {
for (int y = 0; y < Y; y++) {
map[x][y] = arrstr[x][y] - 48;
}
}
BFS(0, 0);
return 0;
}
'문제풀이 > 백준' 카테고리의 다른 글
백준 2110 - 공유기 설치 (0) | 2021.10.10 |
---|---|
백준 10816 - 숫자카드2 (0) | 2021.10.10 |
백준 1992 - 쿼드트리 (0) | 2021.10.09 |
백준 1914 - 하노이탑 (0) | 2021.10.06 |
백준 1991 트리 순회 (0) | 2021.07.02 |