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
15 5 14S*#*..#........****....#...*.P#.*..***.....*.*.#..
Sample Output
YES
Source
公主被绑架了,你有迷宫的地图,该迷宫只有两层楼#表示楼梯,.表示空地,*表示墙,第一行输入N,M,K,表示需要输入两个N*M的矩阵地图,起始点为S,公主的位置为P,问你能否在限定的K步之内,找到公主。如果能的话输出YES,否则输出NO.
HDU 2007-6 Programming Contest View Code View Code
1 #include2 #include 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('\n'); 28 printf("\tStyp: %d\n",d); 29 for(ii=0;ii =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 =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
修改:2015.5.8
1 #include2 #include 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("\t%d %d %d\n",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 else40 {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\n");62 else printf("NO\n");63 }64 return 0;65 }