#include "iostream"
using namespace std;
void print();
int a[]={0,1,2,3,5,6,7,8};//指针数组,依次存入矩阵中构成环的元素下标
int b[9];//表示3*3矩阵,b[4]为空格
int c[9];//确定1所在的位置后,对环进行调整的指针数组
int count=0;//指针移动计数器
int main(){
int t=-1;
cout<<"please enter original order of digits 1-8:";
for(int i=0;i<8;i++)
cin>>b[a[i]];
for(int i=0;i<8;i++)
cout<<b[a[i]];
cout<<endl;
//确定1所在的位置
for(int i=0;i<8&&t==-1;i++)
if(b[a[i]]==1)
t=i;
//调整环的指针数组,将1所在的位置定为环首
for(int i=0;i<8;i++)
c[i]=a[(i+t)%8];
for(int i=1;i<9;i++)
for(int j=i-1;j<8;j++){
if(b[c[j]]==i&&j!=i-1){
b[4]=i;
b[c[j]]=0;
int k;
for(k=j;k!=i-1;k--){
b[c[k]]=b[c[k-1]];
}
b[c[k]]=i;
cout<<"............."<<endl;
print();
b[4]=0;
break;
}else if(b[c[j]]==i){
cout<<"............."<<endl;
print();
break;
}
}
}
void print(){
for(int i=0;i<8;i++)
cout<<b[c[i]];
cout<<endl;
}