Advertisement
tepyotin2

Sliding Puzzle (Chess 8)

May 5th, 2025
496
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.48 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2.  
  3. using namespace std;
  4.  
  5. struct Move{
  6.     string board;
  7.     int count;
  8. };
  9.  
  10. string s;
  11. vector<int> directions[9];
  12. //map<string, int> visited;
  13. unordered_map<string, int> visited;
  14. queue<Move> q;
  15. string res = "123804765";
  16.  
  17. int main(){
  18.     //freopen("slidingpuzzle.in", "r", stdin);
  19.    
  20.     cin >> s;
  21.     directions[0].push_back(1);
  22.     directions[0].push_back(3);
  23.     directions[1].push_back(-1);
  24.     directions[1].push_back(1);
  25.     directions[1].push_back(3);
  26.     directions[2].push_back(-1);
  27.     directions[2].push_back(3);
  28.     directions[3].push_back(-3);
  29.     directions[3].push_back(1);
  30.     directions[3].push_back(3);
  31.     directions[4].push_back(-3);
  32.     directions[4].push_back(-1);
  33.     directions[4].push_back(1);
  34.     directions[4].push_back(3);
  35.     directions[5].push_back(-3);
  36.     directions[5].push_back(-1);
  37.     directions[5].push_back(3);
  38.     directions[6].push_back(-3);
  39.     directions[6].push_back(1);
  40.     directions[7].push_back(-3);
  41.     directions[7].push_back(-1);
  42.     directions[7].push_back(1);
  43.     directions[8].push_back(-3);
  44.     directions[8].push_back(-1);
  45.     visited[s]++;
  46.     q.push({s, 0});
  47.     while(!q.empty()){
  48.         Move cur = q.front();
  49.         q.pop();
  50.         if(cur.board == res){
  51.             cout << cur.count << '\n';
  52.             return 0;
  53.         }
  54.         int it = cur.board.find('0');
  55.         //cout << it << '\n';
  56.         for(int v: directions[it]){
  57.             string c = cur.board;
  58.             swap(c[it+v], c[it]);
  59.             //cout << c << '\n';
  60.             if(visited[c] == 0){
  61.                 visited[c]++;
  62.                 q.push({c, cur.count+1});
  63.             }
  64.         }
  65.     }
  66.     cout << "0" << '\n';
  67.    
  68.     return 0;
  69. }
  70.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement