#include <bits/stdc++.h> using namespace std; struct node{ string mbzt; string dongzuochuan; }; queue <node> q; set<string>s; string start_zt="12345678"; string target_zt; string A_shangxia(string mbzt){ string temp; temp=mbzt.substr(4,4)+mbzt.substr(0,4); return temp; } string B_youyi(string mbzt){ string temp; temp=mbzt.substr(3,1)+mbzt.substr(0,3)+mbzt.substr(7,1)+mbzt.substr(4,3); return temp; } string C_zhongjianzhuan(string mbzt){ string temp; temp=mbzt.substr(0,1)+mbzt.substr(5,1)+mbzt.substr(1,1)+mbzt.substr(3,1)+mbzt.substr(4,1)+mbzt.substr(6,1)+mbzt.substr(2,1)+mbzt.substr(7,1); return temp; } int main() { //cin>>target_zt; target_zt=""; for(int i=0;i<8;i++){ int d; cin>>d; target_zt=target_zt+char(d+48); } //初始状态入队 q.push({target_zt,""}); s.insert(target_zt); while (!q.empty()){ //取头状态数据 string tzhuangtai=q.front().mbzt; string tdongzuochuan=q.front().dongzuochuan; //删除头节点 q.pop(); //依据规则产生状态 string tempzt[3]; tempzt[0]=A_shangxia(tzhuangtai); tempzt[1]=B_youyi(tzhuangtai); tempzt[2]=C_zhongjianzhuan(tzhuangtai); //为动作串增加新动作 string dongzuochuan[3]; dongzuochuan[0] =tdongzuochuan+"A"; dongzuochuan[1] =tdongzuochuan+"B"; dongzuochuan[2] =tdongzuochuan+"C"; //检查刚产生的3个状态情况 for(int i=0;i<3;i++){ //如果是目标状态则输出 if (tempzt[i]==start_zt){ cout<<dongzuochuan[i]<<endl; return 0; } //如果不是目标,且是新状态??? if(s.count(tempzt[i])==0){ q.push({tempzt[i],dongzuochuan[i]}); s.insert(tempzt[i]); } } } cout<<"wujie"<<endl; return 0; }
标签:魔板,string,temp,mbzt,substr,zt,target From: https://www.cnblogs.com/yjb20090514/p/17574721.html