T-T
2024-07-27 17:30:00
发布于:上海
#include<iostream>
using namespace std;
//1.定义方向数组
int n,m,flag;
int dir[4][2]={{0,1},{1,0},{0,-1},{-1,0}};
bool inmap(int x,int y){
//n2,m=3
//x=1,y=2
return x>=1 && x<=n && y>=1 && y<=m;
}
//2.定义map数组存储地图
char mp[45][45];
//3.定义vis数组,判断位置是否访问过
int vis[45][45];
//4.调用dfs开始深搜
void dfs(int x,int y){
//4.1判断是否达到终点
if(xn && ym){
flag=1;
return ;
}
if(flag1) return ;
//4.2标记位置是否被访问过
//不加下面这句话,喜提零分:)
vis[x][y]=1;
//4.3用for循环枚举四方向,遍历方向数组,开始深搜
//i必须从0开始,到3
for(int i=0;i<4;i++){
//(nx,ny)是(x,y)的邻居
int nx=x+dir[i][0],ny=y+dir[i][1];
//4.4判断地图是否越界,位置是否访问,位置是否有障碍
if(inmap(nx,ny) && vis[nx][ny]0 && mp[nx][ny]!='1'){
//4.5从(nx,ny)开始深搜
dfs(nx,ny);
}
}
}
int main(){
cin>>n>>m;
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
cin>>mp[i][j];
}
}
//从(1,1)为起点开始深搜
dfs(1,1);
if(flag1) cout<<"YES";
else cout<<"NO";
return 0;
}
这里空空如也
有帮助,赞一个