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 @ 2023-11-28 20:37  wakappxc  阅读(1359)  评论(0)    收藏  举报