msquare 有点超时

来源:互联网 发布:mac os x sierra 编辑:程序博客网 时间:2024/06/05 21:03
#include<iostream>#include<fstream>#include<string>using namespace std;#define null  NULL;typedef struct node{struct node * parent;//保存父节点string content;//保存本节点的操作序列int c[10];//保存本节点的状态}node;typedef struct sequence{node a[9000];int top;}sequence;void init(sequence * s){s->top=0;}void insert(sequence *s,node n){for(int i=s->top;i>=1;i--){s->a[i]=s->a[i-1];}s->top++;s->a[0]=n;}node pop(sequence *s){s->top--;node n=s->a[s->top];return n;}int main(){ifstream fin ("msquare.in");ofstream fout ("msquare.out");int i;int target[10];for(i=1;i<=8;i++){fin>>target[i];}for(i=1;i<=8;i++){if(target[i]!=i)break;}if(i>8){fout<<0<<endl;fout<<endl;return 0;}sequence s;init(&s);node a,b,c;for(i=1;i<=8;i++){a.c[i]=i;b.c[i]=i;c.c[i]=i;}a.parent=null;a.content="A";for(i=1;i<=4;i++){int temp=a.c[i];a.c[i]=a.c[9-i];a.c[9-i]=temp;}b.parent=null;b.content="B";int temp[10];for(i=1;i<=8;i++){temp[i]=b.c[i];}b.c[1]=temp[4];b.c[2]=temp[1];b.c[3]=temp[2];b.c[4]=temp[3];b.c[5]=temp[6];b.c[6]=temp[7];b.c[7]=temp[8];b.c[8]=temp[5];c.parent=null;c.content="C";int temp2=c.c[2];int temp3=c.c[3];int temp6=c.c[6];int temp7=c.c[7];c.c[2]=temp7;c.c[3]=temp2;c.c[6]=temp3;c.c[7]=temp6;insert(&s,a);insert(&s,b);insert(&s,c);bool t=true;while(t){node n=pop(&s);/*fout<<n.content<<endl;for(i=1;i<=8;i++){fout<<n.c[i]<<' ';}fout<<endl;*/for(i=1;i<=8;i++){if(n.c[i]!=target[i]){break;}}if(i>8){fout<<n.content.length()<<endl;fout<<n.content<<endl;return 0;}node a,b,c;a.parent=&n;a.content=a.parent->content+"A";for(i=1;i<=8;i++){a.c[i]=a.parent->c[i];}for(i=1;i<=4;i++){int temp=a.c[i];a.c[i]=a.c[9-i];a.c[9-i]=temp;}b.parent=&n;b.content=b.parent->content+"B";for(i=1;i<=8;i++){b.c[i]=b.parent->c[i];}int temp[10];for(i=1;i<=8;i++){temp[i]=b.c[i];}b.c[1]=temp[4];b.c[2]=temp[1];b.c[3]=temp[2];b.c[4]=temp[3];b.c[5]=temp[6];b.c[6]=temp[7];b.c[7]=temp[8];b.c[8]=temp[5];c.parent=&n;c.content=c.parent->content+"C";for(i=1;i<=8;i++){c.c[i]=c.parent->c[i];}int temp2=c.c[2];int temp3=c.c[3];int temp6=c.c[6];int temp7=c.c[7];c.c[2]=temp7;c.c[3]=temp2;c.c[6]=temp3;c.c[7]=temp6;insert(&s,a);insert(&s,b);insert(&s,c);}return 0;}

原创粉丝点击