dfs 解法
2026-01-10 13:40:13
发布于:山东
0阅读
0回复
0点赞
#include<iostream>
using namespace std;
int m,n;
char tu[15][15]; //输入的
int e1,e2,s1,s2; //标记起点和终点
int vis[15][15]; //有没有搜过
bool flag=0; //判断能不能通过
int dx[4]={0,-1,0,1};
int dy[4]={1,0,-1,0}; //方向数组 4个方向
void dfs(int x,int y){
vis[x][y]=1;
for(int i=0;i<4;i++){
int xx=dx[i]+x;
int yy=dy[i]+y;
if(xxe1&&yye2){
flag=1;
return;
}
if(xx>0&&yy>0&&xx<=n&&yy<=m){
if(vis[xx][yy]0){
dfs(xx,yy);
}
}
}
}
int main(){
cin>>n>>m;
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
cin>>tu[i][j];
if(tu[i][j]'S'){
s1=i;
s2=j; //存起点
}
if(tu[i][j]'T'){
e1=i;
e2=j; //存终点
}
if(tu[i][j]'X'){
vis[i][j]=1; //当搜过,不重搜
}
}
}
dfs(s1,s2); //传起点
if(flag)cout<<"YES";
else cout<<"NO";
return 0;
}
这里空空如也

有帮助,赞一个