Section 3.2 - Magic Squares

 1  #include  < map >
 2  #include  < queue >
 3  #include  < iostream >
 4 
 5  using   namespace  std;
 6 
 7  int  init_state, target_state;
 8 
 9  void  get_init_and_target_state()
10  {
11      init_state  =   12345678 ;
12       for  ( int  i  =   0 , x, t  =   10000000 ; i  <   8 ; i ++ , t  /=   10 )
13      {
14          cin  >>  x;
15          target_state  +=  x  *  t;
16      }
17  }
18 
19  map < int string >  stateMap;
20 
21  int  main()
22  {
23      freopen( " msquare.in " " r " , stdin);
24      freopen( " msquare.out " " w " , stdout);
25 
26      get_init_and_target_state();
27 
28      queue < int >  q;
29      q.push(init_state);
30      stateMap.insert(make_pair(init_state,  "" ));
31 
32       while  (q.empty()  ==   false )
33      {
34           int  cur  =  q.front(); q.pop();
35 
36           if  (cur  ==  target_state)
37          {
38              cout  <<  stateMap.find(cur) -> second.size()  <<  endl;
39              cout  <<  stateMap.find(cur) -> second  <<  endl;
40               return   0 ;
41          }
42 
43           int  x[ 10 =  {  0  };
44           for  ( int  i  =   8 , t  =  cur; t; i -- , t  /=   10 )
45              x[i]  =  t  %   10 ;
46 
47           int  na  =  x[ 8 *   10000000   +  x[ 7 *   1000000   +  x[ 6 *   100000   +
48                   x[ 5 *   10000   +  x[ 4 *   1000   +  x[ 3 *   100   +  x[ 2 *   10   +  x[ 1 ];
49 
50           int  nb  =  x[ 4 *   10000000   +  x[ 1 *   1000000   +  x[ 2 *   100000   +
51                   x[ 3 *   10000   +  x[ 6 *   1000   +  x[ 7 *   100   +  x[ 8 *   10   +  x[ 5 ];
52 
53           int  nc  =  x[ 1 *   10000000   +  x[ 7 *   1000000   +  x[ 2 *   100000   +
54                   x[ 4 *   10000   +  x[ 5 *   1000   +  x[ 3 *   100   +  x[ 6 *   10   +  x[ 8 ];
55 
56          map < int string > ::iterator it;
57           if  ((it  =  stateMap.find(na))  ==  stateMap.end())
58          {
59              it  =  stateMap.find(cur);
60              stateMap.insert(make_pair(na, it -> second  +   ' A ' ));
61              q.push(na);
62          }
63           if  ((it  =  stateMap.find(nb))  ==  stateMap.end())
64          {
65              it  =  stateMap.find(cur);
66              stateMap.insert(make_pair(nb, it -> second  +   ' B ' ));
67              q.push(nb);
68          }
69           if  ((it  =  stateMap.find(nc))  ==  stateMap.end())
70          {
71              it  =  stateMap.find(cur);
72              stateMap.insert(make_pair(nc, it -> second  +   ' C ' ));
73              q.push(nc);
74          }
75      }
76 
77       return   0 ;
78  }
79 

你可能感兴趣的:(Section 3.2 - Magic Squares)