讨论 / 保存一下
xgc 2015-08-05 01:27:20
点我顶贴 收藏 删除
#include<cstdio>

#include<cstdlib>

#include<cstring>

#include<iostream>

using namespace std;

const int dx[4]={0,-1,0,1};

const int dy[4]={-1,0,1,0};

struct node

{

int a[4][4],x,y,dep;

};

node list[400000];

int head,tail;

bool tf(node n1,node n2)

{

int x,y;

for(x=1;x<=3;x++)

for(y=1;y<=3;y++)

if( n1.a[x][y]!= n2.a[x][y])

return false;

return true;

}

bool check(node tno)

{

int i;

for(i=1;i<=tail;i++)

if( tf( list[i],tno) ==true)

return true;

return false;

}

int main()

{

char ss[15];

int i,j,tt;

list[0].a[1][1]=1;

list[0].a[1][2]=2;

list[0].a[1][3]=3;

list[0].a[2][1]=8;

list[0].a[2][2]=0;

list[0].a[2][3]=4;

list[0].a[3][1]=7;

list[0].a[3][2]=6;

list[0].a[3][3]=5;

scanf("%s",ss+1);

list[1].a[1][1]=ss[1]-'0';if(ss[1]-'0'==0)list[1].x=1;list[1].y=1;

list[1].a[1][2]=ss[2]-'0';if(ss[2]-'0'==0)list[1].x=1;list[1].y=2;

list[1].a[1][3]=ss[3]-'0';if(ss[3]-'0'==0)list[1].x=1;list[1].y=3;

list[1].a[2][1]=ss[4]-'0';if(ss[4]-'0'==0)list[1].x=2;list[1].y=1;

list[1].a[2][2]=ss[5]-'0';if(ss[5]-'0'==0)list[1].x=2;list[1].y=2;

list[1].a[2][3]=ss[6]-'0';if(ss[6]-'0'==0)list[1].x=2;list[1].y=3;

list[1].a[3][1]=ss[7]-'0';if(ss[7]-'0'==0)list[1].x=3;list[1].y=1;

list[1].a[3][2]=ss[8]-'0';if(ss[8]-'0'==0)list[1].x=3;list[1].y=2;

list[1].a[3][3]=ss[9]-'0';if(ss[9]-'0'==0)list[1].x=3;list[1].y=3;

list[1].dep=1;

head=1;tail=1;

node tno;

bool bk=false;

while( head<=tail)

{

for(i=0;i<=3;i++)

{

tno=list[head];

tno.x= list[head].x+ dx[i]; tno.y= list[head].y+ dy[i];

if( tno.x>=1 &&tno.x<=3&& tno.y>=1&&tno.y<=3)

{

tt= tno.a[tno.x][tno.y];

tno.a[tno.x][tno.y]= tno.a[list[head].x][list[head].y];

tno.a[list[head].x][list[head].y]=tt;

tno.dep= list[head].dep+1;

if( check( tno)==false )

{

tail++;

list[tail]=tno;

if(tf(tno,list[0])==true)

{

printf("%d\n",list[tail].dep);

bk=true;break;

}

}

}

}

if( bk==true) break;

head++;

}

return 0;

}

查看更多回复
提交回复