DFS深搜解决迷宫问题(原理分析+代码实现)
深度优先搜索(DFS)
求解思路:
1.先判断是否到达目标位置,如果到达目标位置,再试探有无其他更短的路径。
2.如果没有到达目标位置,则找到下一步可以到达的位置,直到找到目标位置
说白了就是每个方向都试一下 然后把所有的路都给走一遍
#include<iostream> using namespace std; int a[50][50];//2表示障碍 int v[50][50];//1表示访问 int sx,sy,p,q;//设置起始坐标 int mi=9999; int dx[4]={1,0,-1,0};//设置向右为正 向左为负 int dy[4]={0,1,0,-1};//设置向下为正 向上为负 void dfs(int x,int y,int step) { if(x==p && y==q) { if(step<mi) { mi=step; } return ; } for(int i=0;i<=3;i++)//对这四个方向依次试探 { int tx=x+dx[i]; int ty=y+dy[i]; if(a[tx][ty]==1 && v[tx][ty]==0) { v[tx][ty]=1;//如果满足条件就对其进行访问 dfs(tx,ty,step+1);//进行的递归处理并且step要加1 到达这一步就说明步数+1 v[tx][ty]=0;//等到递归结束后就把访问设置为0 也就是进行回溯 } } return ; } int main() { int m,n; cin>>m>>n; for(int i=1;i<=m;i++) { for(int j=1;j<=n;j++) { cin>>a[i][j]; } } cin>>sx>>sy>>p>>q; v[sx][sx]=1; dfs(sx,sy,0); cout<<mi; return 0; } /* 5 4 1 1 2 1 1 1 1 1 1 1 2 1 1 2 1 1 1 1 1 2 1 1 4 3 */
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· 写一个简单的SQL生成工具
· AI 智能体引爆开源社区「GitHub 热点速览」
· C#/.NET/.NET Core技术前沿周刊 | 第 29 期(2025年3.1-3.9)