羅区P1379問題への8つのデジタル問題の解決

私の個人的な感情は、その変形BFS、またはBFS難易特定の学位を持って、悪い人のマスターです。

この質問のアイデア:

一般的にBFSを見つけ、より多くのステップの番号の前にキュー状態の特定の状態を達成するためのステップ数が少ないので、一つだけキューウェイトマップ、付属しています。

1の#include <iostreamの>
 2の#include <cmath>
 3の#include <CStringの>
 4の#include <アルゴリズム>
 5の#include <地図>
 6の#include <キュー>
 7  使って 名前空間STDを、
8  長い 長い DX [ 4 ] = { - 1001 }。
9  長い  DY [ 4 ] = { 0、 - 110 }。
10  長い N。
11 INT   main()の
 12  {
 13      CIN >> N。
14      キュー< 長い 長い > Q;
15      q.push(N)
16      地図< 長い 長い長い ロング > M。
17      M [N] = 0 ;
18      ながら(!q.empty())
 19      {
 20          int型 CNT = q.front()。 
21          INT zyc [ 3 ] [ 3 ]、XX = 0、YY = 0、N = CNT。
22          q.pop()。
23          もし(CNT == 123804765ブレーク24          のための長い 長い I = 2 ; I> = 0 ; i-- 25              のための長い 長い J = 2、J> = 0 ; j-- 26              {
 27                  zyc [I] [J] = N%10 ;
28                  N / = 10 29                  であれば(!zyc [I] [J])
 30                  {
 31                     XX = I;
32                      YY = J。
33                  }
 34              }
 35          のための長い  i = 0 ; iは< 4 ; iは++ 36          {
 37              長い 長い NX = XX + DX [i]は、NY = YY + DYの[i]は、ANS = 0 38              であれば(NX < 0 || NY < 0 ||がnx> 2 || NY> 2続けます39              スワップ(zyc [NX] [NY]、zyc [XX] [YY])。
40              のための長い  i = 0 ; iが< 3 ; iは++ 41                  のための長い 長い J = 0 ; J < 3 ; J ++)ANS = ANS * 10 + zyc [I] [J]。
42              であれば(!m.count(ANS))
 43              {
 44                  M [ANS] = mの[CNT] + 1 45                  q.push(ANS)。
46              }
 47              スワップ(zyc [NX] [NY]、zyc [XX] [YY])。
48          }
 49      }
 50      COUT << M [123 804 765 ]; 
 51は、     戻り 0 ;
 52である } 
ビッグブラザーの論文ください(とにかく、私はそれが論文を何を意味するのか知りません)

 

おすすめ

転載: www.cnblogs.com/handsome-zyc/p/11237371.html