迷宫救援dfs解法

本文介绍了使用深度优先搜索(DFS)解决迷宫救援问题的方法。在给定的n行m列迷宫中,目标是找到从起点到终点的最短路径。通过输入起点和终点坐标,利用DFS遍历迷宫并更新最短步数。样例输入和输出展示了算法的运行情况,并给出了相应的C++代码实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

迷宫救援dfs解法
在一个有n行m列的单元格组成的迷宫中,0代表空地,1代表障碍物,有一名迷路者小红,还有一名救援者小明
输入n1,n2代表小明的出发位置;输入m1,m2代表小红的被困位置,
请输出小明找到小红所需的最短路途(规定一个单元格代表一个长度单位)
样例输入:
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
样例输出:
7


#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
int n,m,m1,m2,min1=999999;
int a[51][51];
int book[51][51];
int as[4][2]={
  
  {0,1},{0,-1},{1,0},{-1,0}};
void dfs(int x,int y,int step)
{
    if(x==m1&&y==m2){
        if(step<min1){
            min1=step;
        }
        return ;
    }
    for(int i=0;i<4;i++){
        int tx=x+as[i][0];
        int ty=y+as[i][1];
        if(tx<1||tx>n||ty<1||ty>m)
            continue ;
        if(a[tx][ty]==0&&book[tx][ty]==0)
            {
                book[tx][ty]=1;
                dfs(tx,ty,step+1);
                book[tx][ty]=0;
            }
    }
    return ;
}
i
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值