-
백준 16928번 뱀과 사다리 게임PS 2020. 3. 19. 11:41
https://www.acmicpc.net/problem/16928
16928번: 뱀과 사다리 게임
첫째 줄에 게임판에 있는 사다리의 수 N(1 ≤ N ≤ 15)과 뱀의 수 M(1 ≤ M ≤ 15)이 주어진다. 둘째 줄부터 N개의 줄에는 사다리의 정보를 의미하는 x, y (x < y)가 주어진다. x번 칸에 도착하면, y번 칸으로 이동한다는 의미이다. 다음 M개의 줄에는 뱀의 정보를 의미하는 u, v (u > v)가 주어진다. u번 칸에 도착하면, v번 칸으로 이동한다는 의미이다. 1번 칸과 100번 칸은 뱀과 사다리의 시작 또는 끝이 아니다. 모든 칸
www.acmicpc.net
<접근방법>
bfs 문제입니다.
해당 지점이 뱀인지 사다리인지는 중요하지 않습니다.
다만 그 지점이 다른 좌표로 이동한다는 사실입니다.
그래서 2차원 배열을 만들고 그 지점이 이동할 좌표를 저장해주었습니다.
뱀 혹은 사다리가 아닌 경우에는 그 지점의 좌표를 저장했습니다.
<느낀 점>
<코드>
#include <iostream> #include <algorithm> #include <queue> using namespace std; int n, m, map[11][11], res; bool visit[101]; queue<int> q; void bfs() { q.push(0); visit[0] = true; while (!q.empty()) { int sz = q.size(); for (int z = 0; z < sz; z++) { int now = q.front(); q.pop(); if (now == 99) { return; } for (int i = 1; i <= 6; i++) { int next = now + i; int ny = next / 10; int nx = next % 10; if (next > 99 || visit[next]) continue; visit[next] = true; int np = map[ny][nx]; q.push(np); } } res++; } } int main() { int num = 0; for (int i = 0; i < 10; i++) { for (int j = 0; j < 10; j++) { map[i][j] = num++; } } cin >> n >> m; while (n--) { int a, b, ay, ax, by, bx; cin >> a >> b; a--; b--; ay = a / 10; ax = a % 10; map[ay][ax] = b; } while (m--) { int a, b, ay, ax, by, bx; cin >> a >> b; a--; b--; ay = a / 10; ax = a % 10; map[ay][ax] = b; } bfs(); cout << res << '\n'; return 0; }
반응형'PS' 카테고리의 다른 글
백준 16974번 레벨 햄버거 (0) 2020.03.19 백준 16948번 데스 나이트 (0) 2020.03.19 백준 16968번 차량 번호판1 (1) 2020.03.19 백준 17085번 십자가 2개 놓기 (1) 2020.03.18 백준 16943번 숫자 재배치 (0) 2020.03.17