굉장히 쉬운 문제인데 어렵게 해석해서 고생했던 문제다.
집 좌표와 편의점 좌표, 펜타포트 좌표를 받고.
BFS를 활용하여 펜타포트에 도착할수 있는지, 아니면 각 편의점에 도착할 수 있는지 판단하여
현재 지점에서 갈 수 있는 편의점의 위치를 큐에 넣어주면 된다.
편의점을 방문했는지 확인하는 bool 배열이 필요하다.
코드
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 | #include<stdio.h> #include<iostream> #include<vector> #include<queue> #include<math.h> #include<memory.h> using namespace std; bool check[103]; bool mat(int x, int y, int gx, int gy) { int dist = abs(gy - y) + abs(gx - x); if (dist <= 1000) { return true; } return false; } int main() { //freopen("Text.txt", "r", stdin); int testcase; cin >> testcase; while (testcase--) { memset(check, false, sizeof(check)); int shopnum; cin >> shopnum; vector<pair<int, int>>arr; for (int i = 0; i < shopnum + 2; i++) { int x, y; cin >> x >> y; arr.push_back(make_pair(x, y)); } queue<pair<int, int>>q; q.push(make_pair(arr[0].first, arr[0].second)); check[0] = true; bool ending = false; while (!q.empty()) { int x = q.front().first; int y = q.front().second; q.pop(); int gx = arr[shopnum + 1].first; int gy = arr[shopnum + 1].second; if (mat(x, y, gx, gy) == true) { ending = true; } for (int i = 1; i < shopnum + 1; i++) { int sx = arr[i].first; int sy = arr[i].second; if (mat(x, y, sx, sy) == true && check[i] == false) { check[i] = true; q.push(make_pair(sx, sy)); } } } if (ending == true) { cout << "happy" << endl; } else cout << "sad" << endl; } } | cs |
'BOJ' 카테고리의 다른 글
백준 5719 / 거의 최단 경로 (0) | 2019.01.17 |
---|---|
백준 1753 / 최단경로 (0) | 2019.01.13 |
백준 11559 / Puyo Puyo (0) | 2019.01.11 |
백준 1726 / 로봇 (0) | 2019.01.10 |
백준 9372 / 상근이의 여행 (0) | 2019.01.09 |