分支限界法-最少步数走出迷宫

本文介绍如何利用分支限界法求解最少步数走出迷宫的问题。通过分析问题,设置状态值和限界条件,以及采用队列作为数据结构存储路径,最终找出从起点到终点的最短路径。示例输入和输出展示了算法的应用,并提供了相关代码实现。
摘要由CSDN通过智能技术生成

问题描述:
用户从屏幕输入m,n表示一个m*n的迷宫,0表示空地,1表示墙,给定起点的行,列;给定终点的行,列;输出最少到达目标的步数;
示例输入:
4 4
0 0 1 0
0 1 0 0
0 0 0 1
0 0 0 0
0 0
2 2
样例输出:
5

问题分析:
1.根据分支限界法基本思想(详见上篇分支限界博客)
(1)分支:当前位置每次有四种可能的走法上下左右,可分四个子状态;
(2)限界:若为墙,则不能走;若走过,则不能走;
2.确定输入输出:
迷宫的行列M,N;
迷宫的初始状态;
起点的坐标;
终点的坐标;
输出一个最小步数;
3.确定所需数据结构:
二维数组表示迷宫;
队列存放路径;
4.确定状态值:
迷宫中-2墙(为了计算与表示方便,将墙1置为-2,若为正常的额1表示,则需要多余的数据结构来记录某点是否走过),-1表示未走过,其余数字值表示从起点至当前位置所需步数;
方向:0-up, 1-down, 2-left, 3-right;

代码展示:

#include <iostream>
#include <queue>
using namespace std;

queue<
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值