最详细题解,有无注释版本
2026-07-22 11:59:51
发布于:广东
1阅读
0回复
0点赞
详细在注释
有注释版本
#include<bits/stdc++.h>
using namespace std;
//最详细注释版
int dx[4]={-1,1,0,0};//dx的-1对dy的0是上,1对0是下,0对-1是左,0对1是右
int dy[4]={0,0,-1,1};
//两个方向数组
int vis[45][45];//标记数组:用来标记迷宫是否走过
char g[45][45];//g代表迷宫(你要输入的)
int n,m;//迷宫大小
int sx,sy,ex,ey;//s开头的是起点坐标,e开头的是终点坐标
//初始化,全局默认为0
void dfs(int x,int y){//定义深搜函数(这里是题库首页里的模版)
vis[x][y]=1;//标记走过
for(int k=0;k<4;k++){
//循环判断
int nx=x+dx[k];//这是下一步要走的x坐标
int ny=y+dy[k];//这是下一步要走的y坐标
if(nx<1||nx>n||ny<1||ny>m) continue;//若下一步为迷宫的边缘,跳过这次
if(vis[nx][ny]) continue;//若下一步走过,跳过
if(g[nx][ny]=='#') continue;//若下一步是墙跳过
dfs(nx,ny);//这里经过筛选后再次深搜下一次的xy
}
}
//最关键的函数部分就此结束
int main()//主程序
{
cin>>n>>m;//输入迷宫大小
cin>>sx>>sy>>ex>>ey;//这里输入起点和终点
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){//注意这里最好i和j=1
cin>>g[i][j];//输入迷宫
}
}
dfs(sx,sy);//深搜
if(vis[ex][ey]) cout<<"YES";//最后的判断,若终点为1,则输出YES
else cout<<"NO";//否则也就是终点为0,则输出NO
return 0;
}
//程序结束
无注释版本
#include<bits/stdc++.h>
using namespace std;
int dx[4]={-1,1,0,0};
int dy[4]={0,0,-1,1};
int vis[45][45];
char g[45][45];
int n,m;
int sx,sy,ex,ey;
void dfs(int x,int y){
vis[x][y]=1;
for(int k=0;k<4;k++){
int nx=x+dx[k];
int ny=y+dy[k];
if(nx<1||nx>n||ny<1||ny>m) continue;
if(vis[nx][ny]) continue;
if(g[nx][ny]=='#') continue;
dfs(nx,ny);
}
}
int main()
{
cin>>n>>m;
cin>>sx>>sy>>ex>>ey;
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
cin>>g[i][j];
}
}
dfs(sx,sy);
if(vis[ex][ey]) cout<<"YES";
else cout<<"NO";
return 0;
}
整段代码里最重要的无疑是
void dfs(int x,int y){
vis[x][y]=1;
for(int k=0;k<4;k++){
int nx=x+dx[k];
int ny=y+dy[k];
if(nx<1||nx>n||ny<1||ny>m) continue;
if(vis[nx][ny]) continue;
if(g[nx][ny]=='#') continue;
dfs(nx,ny);
}
}
这里其实是官方的模版
需要注意的地方有
cin>>n>>m;
cin>>sx>>sy>>ex>>ey;
我这原本写成了这样
cin>>n>>m>>sx>>sy>>ex>>ey;

全部评论 1
写注释把我累死了,希望官方不要删
20小时前 来自 广东
0







有帮助,赞一个