• A计划


    A计划

    Time Limit : 3000/1000ms (Java/Other)   Memory Limit : 32768/32768K (Java/Other)
    Total Submission(s) : 26   Accepted Submission(s) : 2

    Font: Times New Roman | Verdana | Georgia

    Font Size:  

    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

    Source

    公主被绑架了,你有迷宫的地图,该迷宫只有两层楼#表示楼梯,.表示空地,*表示墙,第一行输入N,M,K,表示需要输入两个N*M的矩阵地图,起始点为S,公主的位置为P,问你能否在限定的K步之内,找到公主。如果能的话输出YES,否则输出NO.

    HDU 2007-6 Programming Contest
      1 #include <stdio.h>
      2 #include <stdlib.h>
      3 int Len_X,Len_Y,D,SIGN;
      4 char Map[20][20][5];
      5 int DFS(int x,int y,int z,int d,int D)
      6 {
      7     int ii,jj;
      8     if(SIGN==1)return 0;
      9     if(x>=Len_X||x<0||y>=Len_Y||y<0||d>D)return 0;
     10     if(d<=D&&Map[x][y][z]=='P'){SIGN=1;return 1;}
     11     if(Map[x][y][z]=='#')
     12     {
     13         if(z==0&&(Map[x][y][1]!='*'&&Map[x][y][1]!='#'))
     14         {
     15             DFS(x,y,1,d,D);Map[x][y][1]='.';return 0;
     16         }
     17         else if(z==1&&(Map[x][y][0]!='*'&&Map[x][y][0]!='#'))
     18         {
     19             DFS(x,y,0,d,D);Map[x][y][0]='.';return 0;
     20         }
     21         else return 0;
     22     }
     23         if(d>=D)return 0;
     24     if(Map[x][y][z]=='*')return 0;
     25     else Map[x][y][z]='*';
     26   /* getch();
     27     putchar('
    ');
     28     printf("	Styp: %d
    ",d);
     29             for(ii=0;ii<Len_X;ii++)
     30             {
     31                 if(z==1)putchar('	');
     32                 for(jj=0;jj<Len_Y;jj++)
     33                 {
     34                     printf("%c",Map[ii][jj][z]);
     35                 }
     36                 putchar('
    ');
     37             }*/
     38     if(x+1<Len_X&&Map[x+1][y][z]!='*')
     39     {
     40         DFS(x+1,y,z,d+1,D);
     41         if(Map[x+1][y][z]!='#')
     42             Map[x+1][y][z]='.';
     43     }
     44     if(x-1>=0&&Map[x-1][y][z]!='*')
     45     {
     46         DFS(x-1,y,z,d+1,D);
     47         if(Map[x-1][y][z]!='#')
     48             Map[x-1][y][z]='.';
     49     }
     50     if(y+1<Len_Y&&Map[x][y+1][z]!='*')
     51     {
     52         DFS(x,y+1,z,d+1,D);
     53         if(Map[x][y+1][z]!='#')
     54             Map[x][y+1][z]='.';
     55     }
     56     if(y-1>=0&&Map[x][y-1][z]!='*')
     57     {
     58         DFS(x,y-1,z,d+1,D);
     59         if(Map[x][y-1][z]!='#')
     60             Map[x][y-1][z]='.';
     61     }
     62     return 0;
     63 }
     64 
     65 int main()
     66 {
     67     int Begin_x,Begin_y,Begin_z,i,j,T;
     68     scanf("%d",&T);
     69     while(T--)
     70     {
     71         scanf("%d%d%d",&Len_X,&Len_Y,&D);
     72             getchar();
     73             for(i=0;i<Len_X;i++)
     74             {
     75                 for(j=0;j<Len_Y;j++)
     76                 {
     77                     scanf("%c",&Map[i][j][0]);
     78                     if(Map[i][j][0]=='S')
     79                     {Begin_x=i;Begin_y=j;Begin_z=0;}
     80                 }
     81                 getchar();
     82             }
     83             getchar();
     84             for(i=0;i<Len_X;i++)
     85             {
     86                 for(j=0;j<Len_Y;j++)
     87                 {
     88                     scanf("%c",&Map[i][j][1]);
     89                     if(Map[i][j][1]=='S')
     90                     {Begin_x=i;Begin_y=j;Begin_z=1;}
     91                 }
     92                 getchar();
     93             }
     94             SIGN=0;
     95             DFS(Begin_x,Begin_y,Begin_z,0,D);
     96             if(SIGN==1)
     97                 printf("YES
    ");
     98             else
     99                 printf("NO
    ");
    100         }
    101     return 0;
    102 }
    View Code

    修改:2015.5.8

     1 #include <stdio.h>
     2 #include <stdlib.h>
     3 int Len_X,Len_Y,D,SIGN;
     4 int Begin_x,Begin_y,Begin_z;
     5 char Map[20][20][5];
     6 void DFS(int x,int y,int z,int d,int D)
     7 {
     8    // printf("	%d %d %d
    ",x,y,z);
     9     if(SIGN==1)return ;
    10     if(d>D)return ;
    11     if(Map[x][y][z]=='*')return;
    12     if(d<=D&&Map[x][y][z]=='P'){SIGN=1;return ;}
    13     if(Map[x][y][z]=='#')
    14     {
    15         Map[x][y][z]='*';
    16         if(z==0)DFS(x,y,1,d,D);
    17         else DFS(x,y,0,d,D);
    18         Map[x][y][z]='#';
    19     }
    20     else if(Map[x][y][z]=='.')
    21     {
    22         Map[x][y][z]='*';
    23         DFS(x-1,y,z,d+1,D);
    24         DFS(x+1,y,z,d+1,D);
    25         DFS(x,y-1,z,d+1,D);
    26         DFS(x,y+1,z,d+1,D);
    27         Map[x][y][z]='.';/*和步数有关,需要点还原*/
    28     }
    29     return ;
    30 }
    31 void Input(int z)/*输入地图*/
    32 {
    33     int i,j;
    34     for(i=0;i<=Len_X+1;i++)
    35     {
    36         for(j=0;j<=Len_Y+1;j++)
    37         {
    38             if(i==0||j==0||i==Len_X+1||j==Len_Y+1){Map[i][j][z]='*';}
    39             else
    40             {
    41                 scanf(" %c",&Map[i][j][z]);
    42                 if(Map[i][j][0]=='S')
    43                 {
    44                     Map[i][j][0]='.';
    45                     Begin_x=i;Begin_y=j;Begin_z=0;
    46                 }
    47             }
    48         }
    49     }
    50     return ;
    51 }
    52 int main()
    53 {
    54     int T;
    55     scanf("%d",&T);
    56     while(T--)
    57     {
    58         scanf("%d%d%d",&Len_X,&Len_Y,&D);
    59         Input(0);Input(1); SIGN=0;
    60         DFS(Begin_x,Begin_y,Begin_z,0,D);
    61         if(SIGN==1) printf("YES
    ");
    62         else printf("NO
    ");
    63         }
    64     return 0;
    65 }
    View Code
    转载请备注:
    **************************************
    * 作者: Wurq
    * 博客: https://www.cnblogs.com/Wurq/
    * Gitee: https://gitee.com/wurq
    **************************************
  • 相关阅读:
    cmd git常用命令使用
    vue2.0 vue-qr生成二维码
    全局css设置
    input 输入框 json格式展示
    eslint 常用配置及说明
    es6中promise 使用总结
    vue 自定义全局组件
    vue element 表头添加斜线
    indexedDB 使用
    黑客攻防从入门到精通(攻防与脚本编程篇)
  • 原文地址:https://www.cnblogs.com/Wurq/p/3750336.html
Copyright © 2020-2023  润新知