トピックリンク:http://icpc.njust.edu.cn/Problem/Hdu/1253/
実際には、3次元の延長に、2次元および他の何もないから別の検索方向を、高めます。
コードは以下の通りであります:
1の#include <ビット/ STDC ++ H> 2 使用して 名前空間STDを、 3符号なしのtypedef int型のUI。 4のtypedef 長い 長LL。 5符号なしのtypedef 長い 長いULL。 6 の#define PFのprintf 7 の#define MEM(A、B)のmemset(A、B、はsizeof()) 8 の#define prime1 1E9 + 7 9 の#define prime2 1E9 + 9 10 の#define PI 3.14159265 11 の#define LSON Lを、半ば、室温<< 1 12 の#define rson半ば+ 1、R、RT << 1 | 1 13 の#define scand(X)のscanf( "%のLLF"、&x)は 14 の#define F(I、B)のための(INT iは=; I <= B; I ++) 15 の#defineスキャン()のscanf( "%のD"、&A) 16 の#define DBG(引数)COUT <<#引数<< ":" <<引数<< ENDL。 17 の#define INF 0x3f3f3f3f 18 の#define MAXN 55 19 INT A、B、C、T、K。 20 int型 DIR [ 6 ] [ 3 ] = {{ 1、0、0 }、{ - 1、0、0 }、{ 0、1、0}、{ 0、 - 1、0 }、{ 0、0、1 }、{ 0、0、 - 1 }}。 21 INT 地図[MAXN] [MAXN] [MAXN]。 22 BOOL VIS [MAXN] [MAXN] [MAXN]。 23 構造体ノード{ 24 のint X、Y、Z、ステップと 25 }。 26 ノードCUR、NXT。 27 ブール OK(ノード&Q) 28 { 29 リターン QX> = 1 && q.x <= A && q.y> = 1 && q.y <= B && q.z> = 1&& q.z <= C &&地図[QX] [QY] [QZ] == 0 &&!VIS [QX] [QY] [QZ]。 30 } 31 INT BFS() 32 { 33 キュー<ノード> Q。 34 ノードST。 35 st.x = st.y = st.z = 1 。 36 st.step = 0 。 37 VIS [ 1 ] [ 1 ] [ 1 ] = 1 。 38 q.push(ST)。 39 ながら(!q.empty()) 40 { 41 CUR = q.front()。 42 q.pop(); 43 であれば(cur.x == A && cur.y == B && cur.z == C && cur.step <= K) 44 { 45 リターンcur.step。 46 } 47 F(I、0、5 ) 48 { 49 NXT = CUR。 50 nxt.x + = DIR [I] [ 0 ]。 51 nxt.y + = DIR [I] [ 1 ]。 52 nxt.z + = DIR [I] [ 2 ]。 53 nxt.step ++ ; 54 もし(!OK(NXT))続けます; 55 VIS [nxt.x] [nxt.y] [nxt.z] = 1 。 56 // COUT << nxt.step << "X: "<< nxt.x <<" Y: "<< nxt.y <<" Z:" << nxt.z << ENDL。 57 q.push(NXT)。 58 } 59 } 60 リターン - 1 。 61 } 62 のint main()の 63 { 64 // freopenは( "INPUT.TXT"、 "R"、標準入力)。 65は // freopenは( "output.txtと"、 "W"、STDOUT); 66件 のstd ::イオス:: sync_with_stdio(偽); 67の スキャン(T); 68 一方、(t-- ) 69 { 70 のscanf(" %D%D%D%D "、&、&B、&C&K)。 71 F(I、1 ) 72 F(j、1 、B) 73 F(K、1 、C) 74 { 75 スキャン(マップ[I] [J] [K])。 76 } 77 MEM(VIS、偽)。 78 PF(" %dの\ n " 、BFS())。 79 } 80 }