RT
题目: 一个面积为n * n的森林,里面布满了陷阱,每个 陷阱有2种状态:s和d。前者表示陷阱已经被破坏,后者表示陷阱正常。现在探险家伊泽处在森林中的某个位置,他每次只能移动到上、下、左、右这四个方向之一的相邻位置上,伊泽想要从点A走到点B,但是伊泽不能走出森林,请你写个程序,判断伊泽能不能办到。如果起点或者终点有一个布置有正常的陷阱(状态为d),则看成无法办到。
输入描述 Input Description 第1行是测试数据的组数k。 每组测试数据的第一行数一个正整数n (1 <= n <= 100),表示森林的面积是n * n的。 接下来输入n * n的矩阵,矩阵中的元素为s或者d。 再接下来一行是4个整数a, b,c, d,描述A处在第a行, 第b列,B处在第c行, 第d列。 注意:a,b,c,d都是从1开始计数的。
输出描述 Output Description 能办到则输出“YES”,否则输出“NO”。
样例输入 Sample Input
2
3
sdd
ssd
dss
1 1 2 2
5
sssss
dddsd
ssdss
dddss
sssds 1 1 4 1
样例输出 Sample Output
YES
NO
偶的错误dfs
#include<iostream>
#include<iomanip>
#include<cmath>
#include<cstdlib>
#include<algorithm>
#include<cstdio>
#include<cstring>
#include<queue>
using namespace std;
int k,dir[201][21]={{0},{-1,0},{0,1},{1,0},{0,-1}},x,y,a,b,n;
bool vis[101][101],f[101][101];
string l="NO";
void kx(int ex,int ey){
f[ex][ey]=true;
if(ex==a&&ey==b){
l="YES";
return ;
}
for(int i=1;i<=4;i++){
int dx=ex+dir[i][0],dy=ey+dir[i][1];
if(!vis[dx][dy]&&!f[dx][dy]&&dx>=1&&dy>=1&&dx<=n&&dy<=n){
kx(dx,dy);
}
}
return ;
}
int main(){
///freopen("3849.in","r",stdin);
//freopen("3849.out","w",stdout);
cin>>k;
while(k--){
l="NO";
cin>>n;
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
char g;
cin>>g;
if(g=='d') vis[i][j]=true;
else vis[i][j]=false;
f[i][j]=false;
}
}
cin>>x>>y>>a>>b;
kx(x,y);
cout<<l<<endl;
}
//fclose(stdout);
return 0;
}
求大佬找错啊