暴搜求调

P1379 八数码难题

```cpp for(int i=2;i>=0;i--) for(int j=2;j>=0;j--){ c[i][j]=u%10; u/=10; if(!c[i][j]) x=i,y=j; } ``` u 被除没了,后面一直mp[0] 完整代码: ```cpp #include<bits/stdc++.h> #include<queue> #define ll long long #define ans 123804765 using namespace std; ll n; ll dx[4]={-1,0,0,1},dy[4]={0,-1,1,0}; map<ll,ll> f; queue<ll> q; int main(){ cin>>n; q.push(n); f[n]=0; while(!q.empty()){ ll u=q.front(),v=u/*替身*/,c[3][3],x=0,y=0; q.pop(); if(u==ans) break; for(int i=2;i>=0;i--) for(int j=2;j>=0;j--){ c[i][j]=v%10; v/=10; if(!c[i][j]) x=i,y=j; } for(int k=0;k<4;k++){ ll px=x+dx[k],py=y+dy[k],tmp=0; //cout<<px<<' '<<py<<endl; if(px<0||px>2||py<0||py>2) continue; swap(c[px][py],c[x][y]); for(int i=0;i<=2;i++) for(int j=0;j<=2;j++){ tmp*=10; tmp+=c[i][j]; } //cout<<tmp<<endl; if(!f[tmp]||f[tmp]>f[u]+1){ f[tmp]=f[u]+1; // cout<<tmp<<" "<<f[tmp]<<" "<<u<<' '<<f[u]<<endl;//这里出问题了,但是一直没找到错误 q.push(tmp); } swap(c[px][py],c[x][y]); } } cout<<f[ans]; return 0; } ```
by wanglexi @ 2024-03-23 10:29:02


@[菜のcrzOvO](/user/769006)
by wanglexi @ 2024-03-23 10:29:16


@[wanglexi](/user/378403) thx!
by 菜のcrzOvO @ 2024-03-23 10:32:34


|