Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /// https://informatics.msk.ru/mod/statements/view3.php?chapterid=2001#1
- #include <bits/stdc++.h>
- using namespace std;
- int main(){
- int start, finish;
- cin >> start >> finish;
- queue < int > q;
- int used[10000], dist[10000], from[10000];
- for (int i=1; i<10000; i++) used[i] = 0, from[i] = 0;
- q.push(start);
- used[start] = 1;
- dist[start] = 0;
- while(!q.empty()){
- int v = q.front();
- q.pop();
- if (v == finish) break;
- if (v/1000 != 9 && used[v + 1000] == 0){
- int to = v + 1000;
- used[to] = 1;
- dist[to] = dist[v] + 1;
- q.push(to);
- from[to] = v;
- }
- if (v%10 != 1 && used[v-1] == 0){
- int to = v - 1;
- used[to] = 1;
- dist[to] = dist[v] + 1;
- q.push(to);
- from[to] = v;
- }
- int v1 = v/1000;
- int v2 = (v/100) % 10;
- int v3 = (v%100) / 10;
- int v4 = v % 10; // v2, v3, v4, v1
- int to = v4 * 1000 + v1 * 100 + v2 * 10 + v3;
- if (used[to] == 0){
- used[to] = 1;
- dist[to] = dist[v] + 1;
- q.push(to);
- from[to] = v;
- }
- to = v2 * 1000 + v3 * 100 + v4 * 10 + v1;
- if (used[to] == 0){
- used[to] = 1;
- dist[to] = dist[v] + 1;
- q.push(to);
- from[to] = v;
- }
- }
- vector < int > ans;
- while(finish != 0){
- ans.push_back(finish);
- finish = from[finish];
- }
- for (int i=ans.size()-1; i>-1; i--) cout << ans[i] << '\n';
- return 0;
- }
- /*
- Breadth First Search
- */
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement