Init
This commit is contained in:
59
ACMOJ-1998.cpp
Normal file
59
ACMOJ-1998.cpp
Normal file
@ -0,0 +1,59 @@
|
||||
#include<cstdio>
|
||||
#include<unordered_map>
|
||||
#include<cstring>
|
||||
#include<queue>
|
||||
#include<algorithm>
|
||||
using namespace std;
|
||||
typedef long long LL;
|
||||
const LL KEndStatus=123804765;
|
||||
unordered_map<LL,int> res;
|
||||
int main()
|
||||
{
|
||||
#ifdef local
|
||||
freopen("pro.in","r",stdin);
|
||||
#endif
|
||||
res[KEndStatus]=0;
|
||||
queue<LL> Q;
|
||||
Q.push(KEndStatus);
|
||||
while(Q.size())
|
||||
{
|
||||
LL u=Q.front(); Q.pop();
|
||||
int distu=res[u];
|
||||
int rid[9]={2,2,2,1,1,1,0,0,0};
|
||||
int cid[9]={2,1,0,2,1,0,2,1,0};
|
||||
int dr[4]={0,-1,0,1};
|
||||
int dc[4]={-1,0,1,0};
|
||||
int mpu[3][3],ur,uc;
|
||||
LL utmp=u;
|
||||
for(int i=0;i<9;i++)
|
||||
{
|
||||
mpu[rid[i]][cid[i]]=utmp%10;
|
||||
utmp/=10;
|
||||
if(mpu[rid[i]][cid[i]]==0)
|
||||
{
|
||||
ur=rid[i];
|
||||
uc=cid[i];
|
||||
}
|
||||
}
|
||||
for(int f=0;f<4;f++)
|
||||
{
|
||||
int vr=ur+dr[f],vc=uc+dc[f];
|
||||
if(vr==-1||vr==3||vc==-1||vc==3) continue;
|
||||
swap(mpu[ur][uc],mpu[vr][vc]);
|
||||
LL v=0;
|
||||
for(int r=0;r<3;r++)
|
||||
for(int c=0;c<3;c++)
|
||||
v=v*10+mpu[r][c];
|
||||
if(v!=KEndStatus&&res[v]==0)
|
||||
{
|
||||
res[v]=distu+1;
|
||||
Q.push(v);
|
||||
}
|
||||
swap(mpu[ur][uc],mpu[vr][vc]);
|
||||
}
|
||||
}
|
||||
LL query;
|
||||
scanf("%lld",&query);
|
||||
printf("%d\n",res[query]);
|
||||
return 0;
|
||||
}
|
Reference in New Issue
Block a user