题目描述
这是个简单迷宫,请判断是否能走出迷宫。
输入
第一个数字T代表有T组测试数据;
每组数据第一行为起点终点坐标s1 s2 e1 e2;
接下来为一个3*3迷宫(包括围墙5*5,以0开始);
“*”表示围墙不能走,“.”表示可走;
输出
若是能走出迷宫输出YES,不能则为NO;
样例输入
1
0 1 4 1
*.***
*...*
*...*
*...*
*.***
样例输出
YES
#include<stdio.h>
#include<string.h>
int s1,s2,e1,e2;
int bol[5][5];//记录已经走过的路
char m[5][5];
int dfs()
{
if(s1==e1&&s2==e2)//能出
{
printf("YES\n");
return 1;
}
if(s1-1>=0&&bol[s1-1][s2]==0&&m[s1-1][s2]=='.')//上
{
s1--;bol[s1][s2]=1;
if(dfs()==1)return 1;
s1++;bol[s1][s2]=0;
}
if(s1+1<=5&&bol[s1+1][s2]==0&&m[s1+1][s2]=='.')//下
{
s1++;bol[s1][s2]=1;
if(dfs()==1)return 1;
s1--;bol[s1][s2]=0;
}
if(s2+1<=5&&bol[s1][s2+1]==0&&m[s1][s2+1]=='.')//右
{
s2++;bol[s1][s2]=1;
if(dfs()==1)return 1;
s2--;bol[s1][s2]=0;
}
if(s2-1>=0&&bol[s1][s2-1]==0&&m[s1][s2-1]=='.')//左
{
s2--;bol[s1][s2]=1;
if(dfs()==1)return 1;
s2++;bol[s1][s2]=0;
}
return 0;//不能
}
int main()
{
int t;
scanf("%d",&t);
while(t--)
{
scanf("%d%d%d%d",&s1,&s2,&e1,&e2);
getchar();
memset(bol,0,sizeof(bol));
bol[s1][s2]=1;//标记起始点
for(int i=0;i<5;i++)
{
for(int j=0;j<5;j++)
{
scanf("%c",&m[i][j]);
}
getchar();
}
if(dfs()!=1)
{
printf("NO\n");
}
}
}