Game Develop

[Algorithm] Baekjoon 16928번 : 뱀과 사다리 게임 본문

Algorithm/Baekjoon

[Algorithm] Baekjoon 16928번 : 뱀과 사다리 게임

MaxLevel 2022. 10. 20. 22:29

https://www.acmicpc.net/problem/16928

 

16928번: 뱀과 사다리 게임

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

www.acmicpc.net

 
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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
 
struct Node
{
    int num;
    int count;
};
 
int main()
{
    ios::sync_with_stdio(false);
    cin.tie(0);
    cout.tie(0);
 
    int n, m;
    int x, y; // x < y
    int u, v; // u > v
    map<intint> routes;
    bool visited[101= { false };
 
    cin >> n >> m;
 
    for (int i = 0; i < n; i++)
    {
        cin >> x >> y; 
        routes[x] = y;
    }
 
    for (int i = 0; i < m; i++)
    {
        cin >> u >> v;
        routes[u] = v;
    }
 
    queue<Node> q;
    q.push({ 1,0 });
    int answer = 1000000;
 
    while (!q.empty())
    {
        Node curNode = q.front();
        q.pop();
 
        int curNum = curNode.num;
        int curCount = curNode.count;
 
        if (curNum == 100)
        {
            cout << curCount;
            break;
        }
        
        for (int i = 1; i <= 6; i++)
        {
            int nextNum = curNum + i;
 
            if (nextNum > 100continue;
            
            if (routes[nextNum] && !visited[nextNum])
            {
                visited[nextNum] = true;
                q.push({ routes[nextNum], curCount+1 });
                continue;
            }
 
            if (routes[nextNum] && !visited[nextNum])
            {
                visited[nextNum] = true;
                q.push({ routes[nextNum], curCount+1 });
                continue;
            }
 
            if (!visited[nextNum])
            {
                visited[nextNum] = true;
                q.push({ nextNum, curCount + 1 });
            }
        }
    }
 
    return 0;
}
 
 
 
cs

뭔가 설명이 이것저것 써져있긴 한데, 결국 칸마다의 상태는 총 3개가 있고 반드시 한개의 상태만이 존재한다.

사다리이동하는 칸이거나, 뱀이동을 하는 칸이거나, 그냥 평범한 이동을 하는 칸이거나.

그래서 처음 인풋으로 주어지는 사다리와 뱀이동의 정보에 관해서 맵변수를 따로 선언해서 하긴 했었는데, 어차피 하나의 상태만이 존재하기 때문에 변수 하나로 둘 다 입력을 받았다.