羅区UVA12101プライムパスの問題解決

古典的なBFS

どのくらいの水の4つだけ起動変更するには、ライン上に4ための4つで検索する非常に

  1の#include <iostreamの>
   2の#include <CStringの>
   3。の#include <cstdioを>
   4。の#include <アルゴリズム>
   5。の#include <キュー>
   6。の#include <cmath>
   7。 使用した 名前空間STD;
   8  INT T;
   9  int型N-、M ;
 10  INTブック[ 100001 ] = { 0 }; // レコードがオーバーが見つかった
。11  構造体ノード// Xは現在の数を表し、現在表すステップ番号
12である {
 13で     のint X;
 14      int型のステップと
15  };
 16キュー<ノード> Q; // 広い探索キュー
17  BOOLの zyc_pd(INT X)// 決定素数
18である {
 19      IF(Xの== 0 || == X 1リターン falseに20は      IF(X == 2 || == X 3リターン trueに21は     他の
22は     、{
 23である         ためint型 I = 2、Iは<=(INT)SQRT(X); I ++は24         {
 25              場合(Xの%iは== 0を返す 26          }
 27          リターン 28      }
 29  
30  }
 31  空隙BFS() 
 32  {
 33      のint X1、STEP1、I。
34      ながら(!q.empty())
 35      {
 36          ノードTMP。
37          = TMP q.front()。
38          q.pop()。
39          ×1 = tmp.x。// 赋初始值
40         = tmp.stepステップ1; // 割り当てられた初期値 
 41である         // COUTのX1 << << ENDL; 
42である         IF(X1の== mの)// 検索の結果場合、出力
43は         、{
 44は              COUTステップ1 << << ENDL;
 45              戻り;
 46である         }
 47の         ための(I = 1 ; I <= 9 ; I + = 2// からのビット奇数九から一を(素数であるように)
48          {
 49              のint YY = X1 / 10 * 10 + I。// ビット+ビットに検索を削除する
50              IF(!! YY = X1 &&ブック[YY] && zyc_pd(YY))// 前のステップ+検索+を繰り返さないが素数である数と同じではない
51は             、{
 52で                  ブック[YY] = 1 ; // タグが上に発見された
53である                 ノードTEMP 、
 54である                  ; temp.x = YY //は現在の値に加えられた
55                  temp.step + =ステップ1 。1 ; // 検索プラス1。
れている56                  q.push(TEMP);
 57れる             }
 58          }
 59          のための(I = 0 ;私は< = 9 ; I ++)// 10同様に
60          {
61              INT YY = X1 / 100 * 100 + iが* 10 + X1の%10 62              であれば(YY = X1 &&ブック[YY] &&!zyc_pd(YY))
 63              {
 64                  書籍[YY] = 1 65                  ノードの一時。
66                  temp.x = YY。
67                  temp.step = STEP1 + 1 68                  q.push(TEMP)。
69              }
 70          }
 71          (i = 0 ; I <= 9; i)は++ // 百位同理
72          {
 73              のint YY = X1 / 1000年 * 1000年 + I * 100 + X1%100 74              であれば(YY = X1 &&ブック[YY] &&!zyc_pd(YY))
 75              {
 76                  書籍[YY] = 1 77                  ノードの一時。
78                  temp.x = YY。
79                  temp.step = STEP1 + 1 80                  q.push(TEMP)。
81              }
 82          }
 83         (i = 1 ; iが<= 9 ; iは++)// 千位
84          {
 85              のint YY = i *が1000年 + X1%// 只换千位
86              の場合(YY = X1 &&ブック[YY] &&!!zyc_pd(YY))
 87              {
 88                  本[YY] = 1 ;
89                  ノードの一時。
90                  temp.x = YY。
91                  temp.step = STEP1 + 1 92                  q.push(TEMP)。
93              }
94          }
 95      }
 96      COUT << " 不可" << ENDL; // 出力不可検索されない場合
97      リターン; 
 98  }
 99  INT メイン()
 100  {
 101      CIN >> T;
 102      ながら(T-- 103      {
 104          一方(q.empty()!)q.pop(); // キュー空
105          CIN >> N- M;  
 106          のmemset(書籍、0はsizeof(書籍)); //本アレイ初期化
107          書籍[N] = 1 ; // ブック[n]は、システム上に見出される
108          ノードTMP;
 109          tmp.x = N; // 現在の数N 
110          tmp.step = 0 ; // 現在のステップ番号0 
111          q.push(TMP);
 112          BFS();
 113      } 
 114      戻り 0 ;
 115 }
論文をギャングしてください(とにかく、私はそれが論文を何を意味するのか知りません)

 

おすすめ

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