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
*/
复制代码

 

 

 

 

 

 

 

posted @   wakappxc  阅读(921)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· 写一个简单的SQL生成工具
· AI 智能体引爆开源社区「GitHub 热点速览」
· C#/.NET/.NET Core技术前沿周刊 | 第 29 期(2025年3.1-3.9)
点击右上角即可分享
微信分享提示