题目分析
思路
深度优先探索
分析
将WA变为AC
1、因为输入中有字符,在每输入一行要回车的地方(会产生回车符)添加getchar(),吃掉回车符。
2、将return df(d1,d2);
改为if(df(d1,d2)) return true;
代码
#include<stdio.h>
#include<string.h>
using namespace std;
char a[25][25];
int flag[25][25];
int dd[4][2]={{1,0},{0,1},{-1,0},{0,-1}};
bool df(int x,int y){
for(int i=0;i<4;i++){//遍历上下左右4个点
int d1=x+dd[i][0];
int d2=y+dd[i][1];
if(a[d1][d2]=='.'&&flag[d1][d2]==0&&a[d1][d2]!='#'){//可通过
flag[d1][d2]=1;//标记为已走
if(df(d1,d2)) //return df(d1,d2);会wa
return true;
}
if(a[d1][d2]=='@')//终点
return true;
}
return false;
}
int main(){
int m,n,s1,s2;
int T;
scanf("%d",&T);
getchar();//吃回车符
while(T--){
scanf("%d%d",&n,&m);
getchar();//吃回车符
memset(flag,0,sizeof(flag));
memset(a,'#',sizeof(a));
for(int i=1;i<=m;i++){
for(int j=1;j<=n;j++){
scanf("%c",&a[i][j]);
if(a[i][j]=='s'){//起点
s1=i;
s2=j;
}
}
getchar();//吃回车符
}
if(df(s1,s2))
printf("yes\n");
else
printf("no\n");
}
return 0;
}