标签:
时间限制: 1 Sec 内存限制: 64 MB
提交: 5 解决: 3
[提交][状态][讨论版]
2 6 8 4 5 7 3 1
7
BCABCCB
样例的输入目标状态是由BCABCCB这7步操作获得的,如图所示。
#include <iostream> #include <cstring> #include <cstdio> #include <cstring> #include <algorithm> #include <cmath> #include <time.h> #include <string> #include <map> #include <stack> #include <vector> #include <set> #include <queue> #define inf 0x3f3f3f3f #define mod 1000000007 typedef long long ll; using namespace std; const int N = 25; const int MAX = 2000; int n,m,maxn=-1; int vis[N]; string s="",anss; bool flag=false; map<string,int>p; struct man { string str; string ans; int step; }; queue<man>q; void bfs() { string str="12348765"; string ans=""; man d;d.ans=ans;d.step=0;d.str=str; p[str]=1; q.push(d); while(!q.empty()){ man t=q.front(); // cout<<t.str<<" "<<t.step<<endl; // if(t.str=="68423751")printf("!!!!!"); q.pop(); if(t.str==s){ if(!flag){ anss=t.ans;flag=true; } else anss=min(anss,t.ans); //cout<<t.ans<<endl;system("pause"); } //操作A string l,r; l=t.str.substr(0,4);r=t.str.substr(4,4); string str1=r+l; if(!p[str1]){ p[str1]=1; man k;k.ans=t.ans+‘A‘;k.step=t.step+1;k.str=str1;q.push(k); } //操作B string a=""; a=a+t.str[3]+t.str[0]+t.str[1]+t.str[2]+t.str[7]+t.str[4]+t.str[5]+t.str[6]; if(!p[a]){ p[a]=1; man k;k.ans=t.ans+‘B‘;k.step=t.step+1;k.str=a;q.push(k); } //操作C string f=""; f=f+t.str[0]+t.str[5]+t.str[1]+t.str[3]+t.str[4]+t.str[6]+t.str[2]+t.str[7]; if(!p[f]){ p[f]=1; man k;k.ans=t.ans+‘C‘;k.step=t.step+1;k.str=f;q.push(k); } } } int main(){ int aa[10]; for(int i=1;i<=8;i++){ scanf("%d",&aa[i-1]); if(i<=4)s+=aa[i-1]+‘0‘; } for(int i=8;i>=5;i--){ s+=aa[i-1]+‘0‘; } bfs(); cout<<anss.size()<<endl<<anss<<endl; return 0; }
标签:
原文地址:http://www.cnblogs.com/jianrenfang/p/5743757.html