hdu1253グレートエスケープ(城のモンスターあまりにもハード、毎日逃げるために必然的につながります)

トピックリンク: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 ] = {{ 100 }、{ - 100 }、{ 010}、{ 0、 - 10 }、{ 001 }、{ 00、 - 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、05 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  } 

 

おすすめ

転載: www.cnblogs.com/randy-lo/p/12511107.html