计蒜客T1595-T1599 共5道题,难度不高,深搜以及递归练习的好题目
第一道题解
#include <cstdio>
using namespace std;
const int N=20;
char maze[N][N];
int n,m;
bool st[N][N];
int dx[4]={0,1,0,-1},dy[4]={-1,0,1,0};
bool in(int x,int y){
return x>=0 && x<n && y>=0 && y<m;
}
bool dfs(int x,int y){
st[x][y]=true;
if(maze[x][y]=='T') return true;
for(int i=0;i<4;i++){
int tx=x+dx[i];
int ty=y+dy[i];
if(in(tx,ty) && maze[tx][ty]!='*' && !st[tx][ty]){
if(dfs(tx,ty)) return true;
}
}
return false;
}
int main(){
scanf("%d%d",&n,&m);
for(int i=0;i<n;i++){
scanf("%s",maze[i]);
}
int x,y;
for(int i=0;i<n;i++){
for(int j=0;j<m;j++){
if(maze[i][j]=='S'){
x=i,y=j;
}
}
}
if(dfs(x,y)){
printf("yes\n");
}
else puts("no");
return 0;
}