算法练习-NOJ-1009-迷宫问题

来源:互联网 发布:nba2k17季后赛数据 编辑:程序博客网 时间:2024/04/30 10:46

时限:1000ms 内存限制:10000K 总时限:3000ms

描述

给一个20×20的迷宫、起点坐标和终点坐标,问从起点是否能到达终点。

输入

多个测例。输入的第一行是一个整数n,表示测例的个数。接下来是n个测例,每个测例占21行,第一行四个整数x1,y1,x2,y2是起止点的位置(坐标从零开始),(x1,y1)是起点,(x2,y2)是终点。下面20行每行20个字符,’.’表示空格;’X’表示墙。

输出

每个测例的输出占一行,输出Yes或No。

输入样例

2
0 0 19 19
………………..
XXXXXXXXXXXXXXXXXXXX
………………..
………………..
………………..
………………..
………………..
………………..
………………..
………………..
………………..
………………..
………………..
………………..
………………..
………………..
………………..
………………..
………………..
………………..
0 0 19 19
………………..
XXXXXXXXXXXXXXXXXXX.
………………..
.XXXXXXXXXXXXXXXXXXX
………………..
XXXXXXXXXXXXXXXXXXX.
………………..
.XXXXXXXXXXXXXXXXXXX
………………..
XXXXXXXXXXXXXXXXXXX.
………………..
.XXXXXXXXXXXXXXXXXXX
………………..
XXXXXXXXXXXXXXXXXXX.
XXXXXXXXXXXXXXXXXXX.
XXXXXXXXXXXXXXXXXXX.
XXXXXXXXXXXXXXXXXXX.
………………..
.XXXXXXXXXXXXXXXXXXX
………………..

输出样例

No
Yes

#include<stdio.h>int move[4][2]={0,1,1,0,0,-1,-1,0};char ch[22][22];int xt,yt;int flag;void f(int x,int y){ int row=21; int column=21; int i; ch[x][y]='#'; for(i=0;i<4;i++){  x=x+move[i][0];  y=y+move[i][1];  if(ch[x][y]=='.'){   if(x==xt+1&&y==yt+1)  {flag=1;return ; }   f(x,y);  }  x=x-move[i][0];  y=y-move[i][1]; }}int main(void){ int x,y; int i,j; int n; scanf("%d",&n); while(n--){  scanf("%d%d%d%d",&x,&y,&xt,&yt);  getchar();  flag=0;  //初始化  for(i=0;i<=21;i++){   ch[i][0]='X';   ch[i][21]='X';  }  for(i=0;i<=21;i++){   ch[0][i]='X';   ch[21][i]='X';  }  //输入迷宫  for(i=1;i<=20;i++){   for(j=1;j<=20;j++)    scanf("%c",&ch[i][j]);   getchar();  }  //调用函数  f(x+1,y+1);  //打印  if(flag)   printf("Yes\n");  else   printf("No\n"); } return 0;}
0 0