题解
2024-10-13 22:40:59
发布于:广东
1阅读
0回复
0点赞
//深度优先搜索 (每一行代码下方为注释)
#include<iostream>
//万能头 #include<bits/stdc++.h>也行
using namespace std;
int dx[4]={0,0,-1,1};
int dy[4]={-1,1,0,0};
//方向数组 分别表示 左、右、上、下
const int N = 45;
//不可变类型的 N
int flag = false;
//flag用来标记
int vis[N][N];
int s[N][N];
//vis用来判断是否走过
int n,m;
//行、列
//封装函数DFS计算路径 终点为(n,m)
void DFS(int x,int y)
{
//x=行 y=列
vis[x][y]=1;
//vis数组标记x,y为1,表示走过
if(x==n and y==m)
//x=目标的x轴(就是变量n) y=目标的y轴(就是变量y)
{
cout<<"YES"<<endl;
//输出YES
flag=true;
//标记flag=真值
return;
//返回
}
//开始往下搜索
for(int i=0;i<4;i++)
//for循环从0开始循环4次,不能从1开始因为(0,0)还没搜索
{
int nx = x+dx[i];
//计算差值
int ny = y+dy[i];
//判断是否能走,条件为:不能超界 不能走过 不是障碍
if(nx>=1 and nx<=n and ny>=1 and ny>=1 and vis[nx][ny]==0 and s[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>>s[i][j];
}
}
//调用自定义函数
DFS(1,1);
//标记flag为false时,输出NO
if(flag==false) cout<<"NO";
//结束运行
return 0;
}
这里空空如也
有帮助,赞一个