zoukankan      html  css  js  c++  java
  • HDU 2102 A计划(BFS)

                                            A计划

                                                      Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)

                                                                             Total Submission(s): 7071    Accepted Submission(s): 1657

    Problem Description
    可怜的公主在一次次被魔王掳走一次次被骑士们救回来之后,而今,不幸的她再一次面临生命的考验。魔王已经发出消息说将在T时刻吃掉公主,因为他听信谣言说吃公主的肉也能长生不老。年迈的国王正是心急如焚,告招天下勇士来拯救公主。不过公主早已习以为常,她深信智勇的骑士LJ肯定能将她救出。 现据密探所报,公主被关在一个两层的迷宫里,迷宫的入口是S(0,0,0),公主的位置用P表示,时空传输机用#表示,墙用*表示,平地用.表示。骑士们一进入时空传输机就会被转到另一层的相对位置,但如果被转到的位置是墙的话,那骑士们就会被撞死。骑士们在一层中只能前后左右移动,每移动一格花1时刻。层间的移动只能通过时空传输机,且不需要任何时间。
     
    Input
    输入的第一行C表示共有C个测试数据,每个测试数据的前一行有三个整数N,M,T。 N,M迷宫的大小N*M(1 <= N,M <=10)。T如上所意。接下去的前N*M表示迷宫的第一层的布置情况,后N*M表示迷宫第二层的布置情况。
     
    Output
    如果骑士们能够在T时刻能找到公主就输出“YES”,否则输出“NO”。
     
    Sample Input
    1 5 5 14
    S*#*.
    .#...
    .....
    ****.
    ...#.
     
    ..*.P
    #.*..
    ***..
    ...*.
    *.#..
     
    Sample Output
    YES
     

     题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2102

     1 #include<iostream>
     2 #include<string.h>
     3 using namespace std;
     4 
     5 char map[3][15][15];
     6 int  vis[3][15][15];
     7 int  step[3][15][15];
     8 
     9 struct point
    10 {
    11     int x,y,z;
    12 
    13 }qu[350];
    14 
    15 int ei, ej, ek;
    16 int M, N, T;
    17 int d[4][2] = {{-1,0},{1,0},{0,1},{0,-1}};
    18 
    19 void bfs()
    20 {
    21     int k,front=-1,tail=-1;
    22     qu[++front].x = 0;
    23     qu[front].y = 0;
    24     qu[front].z = 0;
    25     vis[0][0][0] = 1;
    26 
    27     while(tail < front)
    28     {
    29         point tmp1, tmp2;
    30         tmp1 = qu[++tail];
    31         for(k=0; k<4; k++)
    32         {
    33             tmp2.x = tmp1.x;
    34             tmp2.y = tmp1.y + d[k][0];
    35             tmp2.z = tmp1.z + d[k][1];
    36             if(tmp2.x>=0&&tmp2.x<2&&tmp2.y>=0&&tmp2.y<M&&tmp2.z>=0&&tmp2.z<N
    37                 &&map[tmp2.x][tmp2.y][tmp2.z]!='*'&&vis[tmp2.x][tmp2.y][tmp2.z]==0)
    38             {
    39                 if(map[tmp2.x][tmp2.y][tmp2.z]=='#')
    40                 {
    41                     if(tmp2.x==0)tmp2.x = 1;
    42                     else tmp2.x = 0;
    43                     if(map[tmp2.x][tmp2.y][tmp2.z]=='#')continue;
    44                     if(map[tmp2.x][tmp2.y][tmp2.z]=='*')continue;  
    45                     //当遇到时空传输机时,若传送的位置是墙或时空传输机时,就忽略掉
    46                 }
    47                 vis[tmp2.x][tmp2.y][tmp2.z] = 1;
    48                 step[tmp2.x][tmp2.y][tmp2.z] = step[tmp1.x][tmp1.y][tmp1.z] + 1;
    49                 qu[++front] = tmp2;
    50                 if(tmp2.x==ei && tmp2.y==ej && tmp2.z==ek)
    51                 {
    52                     if(step[tmp2.x][tmp2.y][tmp2.z]<=T)
    53                         cout<<"YES"<<endl;
    54                     else 
    55                         cout<<"NO"<<endl;
    56                     return ;
    57                 }
    58             }
    59         }
    60     }
    61     cout<<"NO"<<endl;
    62 }
    63 
    64 void Initlation()
    65 {
    66     int i,j,k;
    67     memset(vis, 0, sizeof(vis));
    68     memset(step, 0, sizeof(step));
    69     cin>>M>>N>>T;
    70     for(i=0;i<2;i++)
    71     {
    72         for(j=0;j<M;j++)
    73         {
    74             for(k=0;k<N;k++)
    75             {
    76                 cin>>map[i][j][k];
    77                 if(map[i][j][k] == 'P')
    78                 {
    79                     ei = i;
    80                     ej = j;
    81                     ek = k;
    82                 }
    83             }
    84         }
    85     }
    86 }
    87 
    88 int main()
    89 {
    90     int Case;
    91     cin>>Case;
    92     while(Case--)
    93     {
    94         Initlation();
    95         bfs();
    96     }
    97     return 0;
    98 }
  • 相关阅读:
    Git上手:四种常见的Git协同工作方式
    Git上手:Git扫盲区
    理解web缓存
    浅谈对技术债的理解
    保护个人隐私,从我做起
    cookie注意事项
    了解JavaScript核心精髓(二)
    简单实现nodejs爬虫工具
    浅谈我所见的CSS组织风格
    利用正则表达式清除多余的空行
  • 原文地址:https://www.cnblogs.com/Dreamcaihao/p/2349617.html
Copyright © 2011-2022 走看看