POJ 3278 解題報告
阿新 • • 發佈:2019-02-14
這道題是個BFS的問題,因為要求的是一個相鄰節點間距離都為1的graph中兩個節點間的最短距離。一開始上來用的DFS,結果可想而知。
3278 | Accepted | 844K | 63MS | G++ | 1192B |
/* ID: thestor1 LANG: C++ TASK: poj3278 */ #include <iostream> #include <fstream> #include <cmath> #include <cstdio> #include <cstring> #include <limits> #include <string> #include <vector> #include <list> #include <set> #include <map> #include <queue> #include <stack> #include <algorithm> #include <cassert> using namespace std; std::vector<bool> visited(150000, false); int main() { int N, K; cin >> N >> K; if (K <= N) { cout << N - K << endl; } else { queue<int> que; que.push(N); visited[N] = true; int step = 0; while (!que.empty()) { int size = que.size(); for (int i = 0; i < size; ++i) { int cur = que.front(); que.pop(); if (cur == K) { cout << step << endl; return 0; } if (cur - 1 >= 0 && !visited[cur - 1]) { que.push(cur - 1); visited[cur - 1] = true; } if (cur + 1 < 150000 && !visited[cur + 1]) { que.push(cur + 1); visited[cur + 1] = true; } if (2 * cur < 150000 && !visited[2 * cur]) { que.push(2 * cur); visited[2 * cur] = true; } } step++; } } return 0; }