问题描述:
用户从屏幕输入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<