BFS handled
/* <Br/> * 1150.cpp< br/> * <br/> * created on: Dec 18,201 0 <br/> * Author: alfred <br/> */<br/> # include <queue> <br/> # include <string> <br/> # include <cstring> <br/> # include <iostream> <br/> using namespace STD; <br/> struct step {<br/> int status [8]; <br/> string step; <br/>}; <br/> int target [8]; <br/> const int init [8] = {1, 2, 3, 4, 8, 7, 6, 5}; <br/> int maxstep; <br/> void a (queue <Step> & Q, const Step & statu) {<br/> step TMP; <br/> for (INT I = 0; I <4; I ++) {<br/> TMP. status [I] = statu. status [I + 4]; <br/> TMP. status [I + 4] = statu. status [I]; <br/>}< br/> TMP. step = statu. step + 'a'; <br/> q. push (TMP); <br/>}< br/> void B (queue <Step> & Q, const step & statu) {<br/> step TMP; <br/> for (INT I = 1; I <4; I ++) {<br/> TMP. status [I] = statu. status [I-1]; <br/> TMP. status [I + 4] = statu. status [I-1 + 4]; <br/>}< br/> TMP. status [0] = statu. status [3]; <br/> TMP. status [4] = statu. status [7]; <br/> TMP. step = statu. step + 'B'; <br/> q. push (TMP); <br/>}< br/> void C (queue <Step> & Q, const step & statu) {<br/> step TMP; <br/> TMP. status [0] = statu. status [0]; <br/> TMP. status [1] = statu. status [5]; <br/> TMP. status [2] = statu. status [1]; <br/> TMP. status [3] = statu. status [3]; <br/> TMP. status [4] = statu. status [4]; <Br/> TMP. status [5] = statu. status [6]; <br/> TMP. status [6] = statu. status [2]; <br/> TMP. status [7] = statu. status [7]; <br/> TMP. step = statu. step + 'C'; <br/> q. push (TMP); <br/>}< br/> void BFS () {<br/> queue <Step> q; <br/> step TMP; <br/> memcpy (TMP. status, init, sizeof (init); <br/> q. push (TMP); <br/> while (! Q. empty () {<br/> TMP = Q. front (); <br/> q. pop (); <br/> If (memcmp (TMP. status, target, sizeof (target) = 0) {<br/> cout <TMP. step. size () <"" <TMP. step <Endl; <br/> return; <br/>}< br/> If (TMP. step. size () = maxstep) {<br/> continue; <br/>}< br/> A (Q, TMP); <br/> B (Q, TMP); <br/> C (Q, TMP); <br/>}< br/> cout <-1 <Endl; <br/>}< br/> int main () {<br/> CIN> maxstep; <br/> while (maxstep! =-1) {<br/> for (INT I = 0; I <8; I ++) {<br/> CIN> target [I]; <br/>}< br/> BFS (); <br/> CIN> maxstep; <br/>}< br/> return 0; <br/>}< br/>