最小步书模型1:1107
作者:
总打瞌睡的天天啊
,
2024-10-20 19:44:36
,
所有人可见
,
阅读 3
#include <iostream>
#include <algorithm>
#include <unordered_map>
#include <queue>
using namespace std;
unordered_map<string,string> from;
string mA(string now){
reverse(now.begin(),now.end());
return now;
}
string mB(string now){
for(int i=3;i>0;i--){
swap(now[i],now[i-1]);
swap(now[7-i],now[8-i]);
}
return now;
}
string mC(string now){
swap(now[1],now[2]);
swap(now[1],now[5]);
swap(now[1],now[6]);
return now;
}
void bfs(string begin,string end){
queue<string> que;
que.push(begin);
from[begin]="";
while(que.size()){
string now=que.front();
que.pop();
string m[3]={mA(now),mB(now),mC(now)};
for(int i=0;i<3;i++)
if(!from.count(m[i])){
from[m[i]]=from[now]+char('A'+i);
if(m[i]==end)
return;
que.push(m[i]);
}
}
}
int main(){
string begin="12345678",end;
for(int i=0;i<8;i++){
int x;
scanf("%d",&x);
end+=char(x+'0');
}
if(begin!=end)
bfs(begin,end);
cout<<from[end].size()<<endl<<from[end];
return 0;
}