过程表示八数码问题

#include<iostream>
using namespace std;
void main()
{
int i,j;
int circle1[8]={0,3,6,7,8,5,2,1};
int circle2[4]={1,4,5,2};//用于第一步的循环
int arr1[8]={0,3,6,7,8,5,4,1};//用于第2步的循环
int arr2[8]={1,4,3,6,7,8,5,2};//用于第三步的循环
int arr3[6]={3,6,7,8,5,4};//用于第四、六步的循环
int arr4[8]={3,0,1,4,5,2,1,0};//用于第五步的循环
int arr5[4]={3,6,7,4};//用于第七、九步的循环
int arr6[12]={3,0,1,2,5,4,7,8,5,2,1,0};//用于第八步的循环
cout<<"输入九个数"<<endl;
int status[9];
for(i=0;i<9;i++)
cin>>status[i];
if(status[2]==1&&status[4]!=0)
{
for(i=0;;i++)
if(status[i]==0)
break;
for(j=0;;j++)
if(circle1[j]==i)
break;
while(status[2]==1||status[2]==0)
{
status[circle1[j%8]]=status[circle1[(j+1)%8]];
status[circle1[(j+1)%8]]=0;
j++;
}
}
else if(status[2]==1&&status[4]==0)
{
i=4;
for(j=0;;j++)
if(circle2[j]==i)
break;
while(status[2]==1||status[2]==0)
{
status[circle2[j%8]]=status[circle2[(j+1)%8]];
status[circle2[(j+1)%8]]=0;
j++;
}

}
else if(status[2]==0)
{
i=2;
for(j=0;;j++)
if(circle2[j]==i)
break;
while(status[2]==1||status[2]==0)
{
status[circle2[j%8]]=status[circle2[(j+1)%8]];
status[circle2[(j+1)%8]]=0;
j++;
}

}
else
{}
cout<<"第1步结果:"<<endl;
for(i=0;i<3;i++)
{
for(j=0;j<3;j++)
cout<<status[i*3+j]<<" ";
cout<<endl;
}
for(i=0;;i++)
if(status[i]==0)
break;//空格当前位置
for(j=0;;j++)
if(arr1[j]==i)
break;
while(status[0]!=1)
{
status[arr1[j%8]]=status[arr1[(j+1)%8]];
status[arr1[(j+1)%8]]=0;
j++;
}//第二步
cout<<"第2步结果:"<<endl;
for(i=0;i<3;i++)
{
for(j=0;j<3;j++)
cout<<status[i*3+j]<<" ";
cout<<endl;
}
i=3;//空格当前位置
for(j=0;;j++)
if(arr2[j]==i)
break;
// cout<<j;
while(status[1]!=2)
{
status[arr2[j%8]]=status[arr2[(j+1)%8]];
status[arr2[(j+1)%8]]=0;
j++;
}//第三步
cout<<"第3步结果:"<<endl;
for(i=0;i<3;i++)
{

for(j=0;j<3;j++)
cout<<status[i*3+j]<<" ";
cout<<endl;
}
i=4;//空格当前位置
if(status[2]==3)
goto lop6;
for(j=0;;j++)
if(arr3[j]==i)
break;
while(status[4]!=3)
{
status[arr3[j%6]]=status[arr3[(j+1)%6]];
status[arr3[(j+1)%6]]=0;
j++;
}//第四步
cout<<"第4步结果:"<<endl;
for(i=0;i<3;i++)
{
for(j=0;j<3;j++)
cout<<status[i*3+j]<<" ";
cout<<endl;
}
i=3;//空格当前位置
for(j=0;;j++)
{
if(arr4[j]==i)
break;
}
do
{
status[arr4[j%8]]=status[arr4[(j+1)%8]];
status[arr4[(j+1)%8]]=0;
j++;
}
while(status[3]!=0);
//第五步
cout<<"第5步结果:"<<endl;
for(i=0;i<3;i++)
{
for(j=0;j<3

;j++)
cout<<status[i*3+j]<<" ";
cout<<endl;
}
i=3;//当前空格位置
lop6: for(j=0;;j++)
if(arr3[j]==i)
break;
while(status[5]!=4)
{
status[arr3[j%6]]=status[arr3[(j+1)%6]];
status[arr3[(j+1)%6]]=0;
j++;
}//第六步
cout<<"第6步结果:"<<endl;
for(i=0;i<3;i++)
{
for(j=0;j<3;j++)
cout<<status[i*3+j]<<" ";
cout<<endl;
}
i=4;
if(status[8]==5)
goto lop9;
for(j=0;;j++)
if(arr5[j]==i)
break;
while(status[4]!=5)
{
status[arr5[j%4]]=status[arr5[(j+1)%4]];
status[arr5[(j+1)%4]]=0;
j++;
}//第七步
cout<<"第7步结果:"<<endl;
for(i=0;i<3;i++)
{
for(j=0;j<3;j++)
cout<<status[i*3+j]<<" ";
cout<<endl;
}
i=3;
for(j=0;;j++)
if(arr6[j]==i)
break;
do
{
status[arr6[j%12]]=status[arr6[(j+1)%12]];
status[arr6[(j+1)%12]]=0;
j++;
}
while(status[3]!=0);//第八步
cout<<"第8步结果:"<<endl;
for(i=0;i<3;i++)
{
for(j=0;j<3;j++)
cout<<status[i*3+j]<<" ";
cout<<endl;
}
i=3;
lop9: for(j=0;;j++)
if(arr5[j]==i)
break;
while(status[7]!=6)
{
status[arr5[j%4]]=status[arr5[(j+1)%4]];
status[arr5[(j+1)%4]]=0;
j++;
}//第九步
if(status[3]==8&&status[6]==7)
for(i=0;i<3;i++)
{
for(j=0;j<3;j++)
cout<<status[i*3+j]<<" ";
cout<<endl;
}
else
cout<<"原问题无解!";
}


相关文档
最新文档