原题链接
思路:DFS模板题
代码:
#include<iostream>
#include<cstring>
using namespace std;
char map[17][17];
int vis[17][17];
int ok;
int n;
void DFS(int x,int y){
vis[x][y]=1;
if( map[x][y]=='e' ){ //搜到则跳出
ok=1;return;
}
int dir[4][2]={{0,1},{-1,0},{0,-1},{1,0}}; //上左下右
for(int i=0;i<4;i++){
int tx,ty;
tx=x+dir[i][0];
ty=y+dir[i][1];
if(tx<0 || tx>n-1 || ty<0 || ty>n-1 ) //越界结束此方向搜索
continue;
if(!vis[tx][ty] && map[tx][ty]!='#'){
vis[tx][ty]=1;
DFS(tx,ty);
}
}
}
int main(){
int T;
cin>>T;
while(T--){
cin>>n;
for(int i=0;i<n;i++)
for(int j=0;j<n;j++)
cin>>map[i][j];
memset(vis,0,sizeof(vis));
ok=0;
DFS(0,0);
if(ok) cout<<"YES\n";
else cout<<"NO\n";
}
}