思路:广搜,用map去重 程序:
#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define per(i,o,p) for(int (i)=(o);(i)>=(p);(i)--)
#define rep(i,o,p) for(int (i)=(o);(i)<(p);(i)++)
int read(){
int f=1,k=0;
char c;
c=getchar();
while(c<'0'||c>'9'){
if(c=='-'){
f=-1;
}
c=getchar();
}
while(c>='0'&&c<='9'){
k=(k<<1)+(k<<3)+(c^48);
c=getchar();
}
return f*k;
}
void write(int x){
if(x<0){
putchar('-');
x=-x;
}
if(x>9){
write(x/10);
}
putchar(x%10+'0');
}
void pl(){putchar('\n');}
vector<int> SWap(vector<int>v,int a,int b){
int temp=v[a];
v[a]=v[b];
v[b]=temp;
return v;
}
vector<int> A(vector<int>v){
v=SWap(v,0,7);
v=SWap(v,1,6);
v=SWap(v,2,5);
v=SWap(v,3,4);
return v;
}
vector<int> B(vector<int>v){
int temp=v[3];
v[3]=v[2];
v[2]=v[1];
v[1]=v[0];
v[0]=temp;
temp=v[4];
v[4]=v[5];
v[5]=v[6];
v[6]=v[7];
v[7]=temp;
return v;
}
vector<int> C(vector<int>v){
int temp=v[1];
v[1]=v[6];
int tem2=temp;
temp=v[2];
v[2]=tem2;
tem2=temp;
temp=v[5];
v[5]=tem2;
v[6]=temp;
return v;
}
vector<int>obj;
map<string,bool>pm;
map<string,vector<int> >mp;
string bfs(){
queue<string>q;
vector<int>v;
mp.clear();
pm.clear();
q.push("");
v.push_back(1);
v.push_back(2);
v.push_back(3);
v.push_back(4);
v.push_back(5);
v.push_back(6);
v.push_back(7);
v.push_back(8);
mp[""]=v;
while(true){
if(q.empty()){
return "-1";
}
string F=q.front();
if(pm[F]==true){
continue;
}
if(mp[F]==obj){
write(F.length());
pl();
return F;
}
string f=F+'A';
q.push(f);
mp[f]=A(mp[F]);
f=F+'B';
q.push(f);
mp[f]=B(mp[F]);
f=F+'C';
q.push(f);
mp[f]=C(mp[F]);
pm[F]=true;
q.pop();
}
}
int main(){
for(int i=0;i<8;i++)obj.push_back(read());
string s=bfs();
s='.'+s;
for(int i=1;i<s.length();i++){
putchar(s[i]);
if(i%60==0){
pl();
}
}
return 0;
}