[백준 2644번] 촌수계산
2017. 6. 23. 02:34ㆍ알고리즘/백준
반응형
풀이
BFS 문제인데 촌수(카운트)를 세줄때 cnt_que를 생성해서 계산해주어야 해결가능했다...
소스 코드
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 | #include <iostream> using namespace std; int n, m, dest_x, dest_y, xy[101][101] = {0,}; int q[10001], head = 0, tail = 0,flag=0,result; int cnt_q[10001], c_head = 0, c_tail = 0; void push(int a) { q[tail++] = a; } void c_push(int a) { cnt_q[c_tail++] = a; } int pop() { return q[head++]; } int c_pop() { return cnt_q[c_head++]; } void bfs() { while (1) { int start = pop(); int cnt = c_pop(); for (int i = 1; i <= n; i++) { if (xy[start][i] == 1 || xy[i][start] == 1) { push(i); c_push(cnt + 1); xy[start][i] = cnt+1; xy[i][start] = cnt+1; if (i == dest_y) { result = cnt; return; } } } if (head == tail) { flag = 1; break; } } } int main() { cin >> n >> dest_x >> dest_y >> m; for (int i = 0; i < m; i++) { int x, y; cin >> x >> y; xy[x][y] = 1; xy[x][y] = 1; } push(dest_x); c_push(2); bfs(); if (flag) cout << -1 << '\n'; else cout << result-1 << '\n'; return 0; } | cs |
반응형
'알고리즘 > 백준' 카테고리의 다른 글
[백준 2167번] 2차원 배열의 합 (0) | 2017.06.30 |
---|---|
[백준 5014번] 스타트링크 (0) | 2017.06.25 |
[백준 9461번] 파도반 수열 (0) | 2017.06.20 |
[백준 11057번] 오르막 수 (0) | 2017.06.16 |
[백준 1212번] 8진수 2진수 (0) | 2017.06.15 |