https://www.acmicpc.net/problem/16928
이 문제는 뱀과 사다리에 대한 정보가 주어지고, 사다리는 해당 칸에서 위로 올라갈 수 있지만, 뱀은 아래로 내려가는 구조입니다. 만약 사다리나 뱀을 만나지 않는다면, 주사위를 던져 나올 수 있는 모든 경로를 탐색하면 됩니다(6가지)
<코드>
#include <iostream>
#include <queue>
using namespace std;
int dist[101];
int nex[101];
using namespace std;
int main()
{
int n, m;
cin >> n >> m;
for (int i = 1; i <= 100; i++)
{
nex[i] = i;
dist[i] = -1;
}
// 거리 초기화
while (n--)
{
int x, y;
cin >> x >> y;
nex[x] = y;
}
// 사다리
while (m--)
{
int x, y;
cin >> x >> y;
nex[x] = y;
}
// 뱀
dist[1] = 0;
queue<int> q;
q.push(1);
while (!q.empty())
{
int x = q.front();
q.pop();
for (int i = 1; i <= 6; i++)
{
int y = x + i;
if (y > 100)
continue;
y = nex[y];
if (dist[y] == -1)
{
dist[y] = dist[x] + 1;
q.push(y);
}
}
}
cout << dist[100];
return 0;
}
우선적으로, 뱀과 사다리에 대한 정보를 저장해 둡니다. 더불어, 시작점에서는 아직 이동을 하지 않았으므로 모든 이동거리를 -1로 초기화해줘야 합니다. 그리고 1번 칸에서 시작하기 때문에 1번 칸에 대한 정보를 push 하고 BFS 탐색을 시작하게 됩니다. 만약 해당 인덱스에 방문하지 않았으면, 이전 방문 횟수 + 1을 통해 이동 횟수를 1번 증가시켜 주면 됩니다.
'PS > 깊이 우선 탐색, 너비 우선 탐색[DFS, BFS]' 카테고리의 다른 글
백준 16948 데스 나이트(c++) (0) | 2023.01.29 |
---|---|
백준 9019 DSLR(c++) (0) | 2023.01.29 |
백준 16917 두 동전(c++) (0) | 2023.01.28 |
백준 1600 말이 되고픈 원숭이(c++) (0) | 2023.01.22 |
백준 2251 물통(c++) (0) | 2023.01.21 |