深搜-模板
2024-10-20 15:28:11
发布于:广东
12阅读
0回复
0点赞
#include<iostream>
using namespace std;
const int N = 45;
//方向数组 左,右,上,下
int dx[4]={0,0,-1,1};
int dy[4]={-1,1,0,0};
int f = 0;//作为判断是否能达到目标
int vis[N][N];//判断点是否走过
int a[N][N];//存图
int n,m;//行和列
//设计dfs函数,终点为(n,m);
void dfs(int x,int y){
vis[x][y] = 1;//标记走过(可走)
//可以先判断一下,是不是目标点,是就输出YES,并结束搜索
if(x==n && y==m){
cout<<"YES"<<endl;
f=1;
return;
}
//开始搜索下一个可能值
for(int i=0;i<4;i++){
//下一个点的坐标
int nx = x + dx[i];
int ny = y + dy[i];
//判断一下,下一个点,能不能走?(合法)
//合法:不能超边界 不能被走过 不能是障碍
if(nx>=1 && nx<=n && ny>=1 && ny<=m && vis[nx][ny]==0 && a[nx][ny]!=1){
dfs(nx,ny);
}
}
}
int main(){
//输入信息
cin>>n>>m;
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
cin>>a[i][j];
}
}
//调用深搜函数dfs,起点为(1,1)
dfs(1,1);
if(f==0) cout<<"NO";
return 0;
}
全部评论 1
打卡
2024-10-10 来自 广东
0
有帮助,赞一个