#include #include #include #include #include using namespace std; set> visited; //这里默认九宫格 void swapUp(vector& _v, int _i){ if(_i == 0 || _i == 1 || _i ==2 ) return; swap(_v[_i], _v[_i - 3]); } void swapDown(vector& _v, int _i){ if(_i == 6 || _i == 7 || _i ==8 ) return; swap(_v[_i], _v[_i + 3]); } void swapLeft(vector& _v, int _i){ if(_i == 0 || _i == 3 || _i ==6 ) return; swap(_v[_i], _v[_i - 1]); } void swapRight(vector& _v, int _i){ if(_i == 2 || _i == 5 || _i ==8 ) return; swap(_v[_i], _v[_i + 1]); } //pos -> 白格位置 int bfs(vector _aim, vector _v){ deque, int>> q; q.push_back({_v, 0}); visited.insert(_v); while(!q.empty()){ auto tmp = q.front(); q.pop_front(); vector tmpv = tmp.first; int step = tmp.second; if(tmpv == _aim) return step; int x; for(int i = 0; i < tmpv.size(); i++){ if(tmpv[i] == 0) { x = i; break; } } // 上 if(x >= 3){ vector tmps = tmpv; swapUp(tmps, x); if(!visited.count(tmps)){ visited.insert(tmps); q.push_back({tmps, step + 1}); } } // 下 if(x <= 5){ vector tmps = tmpv; swapDown(tmps, x); if(!visited.count(tmps)){ visited.insert(tmps); q.push_back({tmps, step + 1}); } } // 左 if(x % 3 != 0){ vector tmps = tmpv; swapLeft(tmps, x); if(!visited.count(tmps)){ visited.insert(tmps); q.push_back({tmps, step + 1}); } } // 右 if(x % 3 != 2){ vector tmps = tmpv; swapRight(tmps, x); if(!visited.count(tmps)){ visited.insert(tmps); q.push_back({tmps, step + 1}); } } } return -1; // 无解 } int main(){ int n; cin >> n; vector arr(n, -1); vector aim(n, -1); int pos; for(int i = 0; i < n; i++){ cin >> arr[i]; if(arr[i] == 0) pos = i; } for(int i = 0; i < n; i++){ cin >> aim[i]; } cout << bfs(aim, arr) << endl; return 0; } /* 9 2 6 4 1 3 7 0 5 8 8 1 5 7 3 6 4 0 2 */