Advertisement
Hydron

Числа

Dec 7th, 2021
1,234
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.65 KB | None | 0 0
  1. /// https://informatics.msk.ru/mod/statements/view3.php?chapterid=2001#1
  2. #include <bits/stdc++.h>
  3.  
  4. using namespace std;
  5.  
  6. int main(){
  7.     int start, finish;
  8.     cin >> start >> finish;
  9.     queue < int > q;
  10.  
  11.     int used[10000], dist[10000], from[10000];
  12.     for (int i=1; i<10000; i++) used[i] = 0, from[i] = 0;
  13.     q.push(start);
  14.     used[start] = 1;
  15.     dist[start] = 0;
  16.     while(!q.empty()){
  17.         int v = q.front();
  18.         q.pop();
  19.         if (v == finish) break;
  20.         if (v/1000 != 9 && used[v + 1000] == 0){
  21.             int to = v + 1000;
  22.             used[to] = 1;
  23.             dist[to] = dist[v] + 1;
  24.             q.push(to);
  25.             from[to] = v;
  26.         }
  27.         if (v%10 != 1 && used[v-1] == 0){
  28.             int to = v - 1;
  29.             used[to] = 1;
  30.             dist[to] = dist[v] + 1;
  31.             q.push(to);
  32.             from[to] = v;
  33.         }
  34.         int v1 = v/1000;
  35.         int v2 = (v/100) % 10;
  36.         int v3 = (v%100) / 10;
  37.         int v4 = v % 10; // v2, v3, v4, v1
  38.         int to = v4 * 1000 + v1 * 100 + v2 * 10 + v3;
  39.         if (used[to] == 0){
  40.             used[to] = 1;
  41.             dist[to] = dist[v] + 1;
  42.             q.push(to);
  43.             from[to] = v;
  44.         }
  45.  
  46.         to = v2 * 1000 + v3 * 100 + v4 * 10 + v1;
  47.         if (used[to] == 0){
  48.             used[to] = 1;
  49.             dist[to] = dist[v] + 1;
  50.             q.push(to);
  51.             from[to] = v;
  52.         }
  53.     }
  54.     vector < int > ans;
  55.     while(finish != 0){
  56.         ans.push_back(finish);
  57.         finish = from[finish];
  58.     }
  59.     for (int i=ans.size()-1; i>-1; i--) cout << ans[i] << '\n';
  60.     return 0;
  61. }
  62. /*
  63. Breadth First Search
  64. */
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement