본문 바로가기
알고리즘/BFS

12761 돌다리

by tryotto 2020. 1. 20.
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
85
86
87
88
#include <stdio.h>
#include <queue>
#include <utility>
 
using namespace std;
 
int a, b, n, m;
int bfs(int cur) {
    queue<pair<intint>> q;
    q.push(make_pair(cur, 0));
 
    int dx[2= { 1,-1 };
    int dxA[2= { a,-a };
    int dxB[2= { b,-b };
    int mulAB[2= { a, b };
 
    int chk[100001= { 0 };
    chk[cur] = 1;
 
    int rst = -1;
    while (!q.empty()) {
        cur = q.front().first;
        int cnt = q.front().second;
 
        if (cur == m) {
            return cnt;
            break;
        }
 
        q.pop();
 
        // cur+-1
        for (int i = 0; i < 2; i++) {
            int next = cur + dx[i];
            if (next < 0 || next>100000)
                continue;
            if (chk[next] != 0)
                continue;
 
            chk[next] = 1;
            q.push(make_pair(next, cnt + 1));
        }
 
        //cur+-a
        for (int i = 0; i < 2; i++) {
            int next1 = cur + dxA[i];
            if (next1 < 0 || next1>100000)
                continue;
            if (chk[next1] != 0)
                continue;
 
            chk[next1] = 1;
            q.push(make_pair(next1, cnt + 1));
        }
 
        //cur-+b
        for (int i = 0; i < 2; i++) {
            int next2 = cur + dxB[i];
            if (next2 < 0 || next2>100000)
                continue;
            if (chk[next2] != 0)
                continue;
 
            chk[next2] = 1;
            q.push(make_pair(next2, cnt + 1));
        }
                
        //cur*ab
        for (int i = 0; i < 2; i++) {
            int next = cur * mulAB[i];
            if (next < 0 || next>100000)
                continue;
            if (chk[next] != 0)
                continue;
 
            chk[next] = 1;
            q.push(make_pair(next, cnt + 1));
        }
    }
    return rst;
}
 
int main() {
    scanf("%d %d %d %d"&a, &b, &n, &m);
 
    int rst = bfs(n);
    printf("%d", rst);
}
cs


꼼수 부리다가 계속 에러가 났다

꼼수는 좋으나, 논리적인 부분에서 오류가 안 나도록 제발 조심하자
몇분을 날린거야..진짜..


'알고리즘 > BFS' 카테고리의 다른 글

3184 양  (0) 2020.01.20
2251 물통  (0) 2020.01.20
9372 상근이의 여행  (0) 2020.01.20
5014 스타트링크  (0) 2020.01.20
2589 보물섬  (0) 2020.01.19