深搜刚上手的来这里
2026-07-01 18:43:43
发布于:江苏
22阅读
0回复
0点赞
用深搜解决迷宫类问题,通常都是用固定模版。
深度优先搜索迷宫模版
void dfs(int x,int y){
if(x == fx&&y == fy){//此处fx和fy看具体情况,本题就是n和m,指边界
//走到终点
return ;
}
for(int i = 0;i < 4;i++){
int nx = x+dirx[i];
int ny = y+diry[i];//此处dirx[]和diry[]数组是用来记录不同位置(上下左右)的坐标变化
if(nx < 1||nx > n||ny < 1||ny > m){
continue;
if(vis[nx][ny] == 1||mp[nx][ny] == 1){//vis[]记录是否走过,mp[]记录每一块的内容(路、墙)
continue;
}
vis[nx][ny] = true;
dfs(nx,ny);
//vis[nx][ny] = false,此处为重置,看情况加或不加
}
}
}
参考代码
#include<bits/stdc++.h>
using namespace std;
int n,m;
int mp[50][50];
bool vis[50][50],flag = 0;
int dx[]={1,-1,0,0};
int dy[]={0,0,1,-1};
void dfs(int x,int y){
if(x==n&&y == m){
flag = true;
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) continue;
if(mp[nx][ny] == 1) continue;
if(vis[nx][ny] == 1) continue;
vis[nx][ny] = true;
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];
}
}
vis[1][1] = 1;
dfs(1,1);
if(flag) cout <<"YES";
else cout << "NO";
return 0;
}
点个赞吧,真的很不容易呀
全部评论 2
- 置顶
动动你们发财的小手,给我点个赞吧

1周前 来自 江苏
2 写点其他种类的帖子吧
昨天 来自 上海
1行,可以
昨天 来自 江苏
1我赚了六十几个赞(不含评论)
昨天 来自 上海
2还上榜了,虽然现在没了
昨天 来自 上海
1












有帮助,赞一个