解救小明 DFS

解救小明:有一天小明一个人去玩迷宫,但是方向感不好的小明迷路了,小红得知后要去解救小明,小红知道了迷宫的地图,小红要以最快的速度解救小哈
迷宫由m行n列组成,都小于50,每个单元格要不是空地,要不是障碍物,你的任务是帮助小红找到一条通往小明的最短路径,注意障碍物是不能走的。
小明的位置为(p,q),迷宫入口为(1,1),输入数据如下:
5 4
0 0 1 0
0 0 0 0
0 0 1 0
0 1 0 0
0 0 0 1
1 1 4 3

#include<iostream>
#include<cstdio>
using namespace std;
int n,m,s[51][51],q,e,book[51][51],min1=0x7fffffff;
void dfs(int x,int y,int step)
{
    int a[4][2]={{0,1},{1,0},{-1,0},{0,-1}};//表示上下左右 
    int tx,ty;
    if(x==q&&y==e)//满足条件就进行比较 
    {
        if(step<min1)//寻求最小值 
        {
            min1=step;
        }
        return;
    }
    for(int u=0;u<4;u++)
    {
        tx=x+a[u][0];
        ty=y+a[u][1];
        if(tx>0&&tx<=m&&ty>0&&ty<=n)//注意这个条件 
        if(s[tx][ty]==0&&book[tx][ty]==0)
        {
            book[tx][ty]=1;
            dfs(tx,ty,step+1); 
            book[tx][ty]=0;
        }
    }
    return;
}
int main(){
/*  freopen("in.txt","r",stdin);//可以忽略 
    freopen("out.txt","w",stdout);*/
    int start1,start2;
    scanf("%d%d",&n,&m);
    for(int i=1;i<=n;i++)//输入矩阵 
    {
        for(int j=1;j<=m;j++)
        {
            scanf("%d",&s[i][j]);
        }
    }
    scanf("%d%d%d%d",&start1,&start2,&q,&e);
    dfs(start1,start2,0);//调用自定义函数DFS 深搜 解决 
    printf("%d",min1);//这就不要说了 
    return 0;
}

利用BFS:https://blog.csdn.net/qq_42866708/article/details/81534345

猜你喜欢

转载自blog.csdn.net/qq_42866708/article/details/81533575
dfs