又是个裸BFS...
和西安网赛那道1006一样的,只不过加上了要记录方案。顺便复习map
记录方案直接在bfs队列的结点里加一个vector<int> opt,把从开头一直到当前结点的操作序列记下来
1 /* 2 PROB:msquare 3 LANG:C++ 4 */ 5 6 #include 7 #include 8 #include 9 #include
,int>(A,1)); 71 while (!Q.empty()) 72 { 73 node tmp=Q.front(); 74 Q.pop(); 75 int st=tmp.step; 76 //cout<<"step "<
< ,int>(a,1));103 Q.push(node(a,st+1,yy,1));104 }105 //opr2106 a=y;107 int t1=a[3],t2=a[7];108 a[3]=a[2]; a[7]=a[6];109 a[2]=a[1]; a[6]=a[5];110 a[1]=a[0]; a[5]=a[4];111 a[0]=t1; a[4]=t2;112 if (!M.count(a))113 {114 M.insert(pair
,int>(a,1));115 Q.push(node(a,st+1,yy,2));116 }117 //opr3118 a=y;119 int tm=a[1];120 a[1]=a[5]; a[5]=a[6]; a[6]=a[2]; a[2]=tm;121 if (!M.count(a))122 {123 M.insert(pair ,int>(a,1));124 Q.push(node(a,st+1,yy,3));125 }126 }127 }128 129 return 0;130 }