쾌락없는 책임 (공부)/알고리즘 문제풀이

[Algorithm] 16928 뱀과 사다리 게임 - C++, BFS

허스크 2022. 5. 5. 16:03
반응형
 

16928번: 뱀과 사다리 게임

첫째 줄에 게임판에 있는 사다리의 수 N(1 ≤ N ≤ 15)과 뱀의 수 M(1 ≤ M ≤ 15)이 주어진다. 둘째 줄부터 N개의 줄에는 사다리의 정보를 의미하는 x, y (x < y)가 주어진다. x번 칸에 도착하면, y번 칸으

www.acmicpc.net

#include <iostream>
#include <queue>

using namespace std;

int ladder, snake;
int nextMap[200];
bool visit[101];

void MakeRoute(){
    int from, to;
    cin >> from >> to;
    nextMap[from] = to;
}

int main(){
    // init
    ios_base::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);
    for(int i = 1; i <= 100; i++){
        nextMap[i] = i;
    }

    // input
    cin >> ladder >> snake;
    while(ladder--){
        MakeRoute();
    }
    while(snake--){
        MakeRoute();
    }
    
    // solution
    queue<pair<int, int>> dice;  // pos, count
    dice.push({1, 0});
    visit[1] = true;

    while (!dice.empty()){
        int curPos = dice.front().first;
        int count = dice.front().second;
        dice.pop();

        if(curPos == 100){
            cout << count << '\n';
            return 0;
        }

        for(int i = 1; i <= 6; i++){
            int nextPos = curPos+i;
            if(nextPos > 100)   continue;
            nextPos = nextMap[curPos+i];

            if(visit[nextPos])  continue;

            visit[nextPos] = true;
            dice.push({nextPos, count+1});
        }
    }
}

 nextMap 이란 배열을 선언해 이 배열을 '인덱스에 도달했을때 연결된 다음 지점'에 대한 정보로 사용했습니다. 사다리나 뱀이 없는 곳이라면 그냥 인덱스가 이 배열값이 되는 것이고 아닌 경우에는 견결된 곳으로 이동하게 만들어 주면 되는 것입니다.

반응형