python迷宫问题求最短路径_数据结构之迷宫问题求解(二)迷宫的最短路径

本文探讨如何使用Python解决迷宫问题并寻找最短路径。通过设置Min栈,与普通求解方法相比,每次找到出口时会比较路径长度,更新最短路径。文章详细介绍了检查路径、寻找最短路径的函数,并提供了相应的代码实现。
摘要由CSDN通过智能技术生成

上篇文章我们讨论了,迷宫问题的普通求解问题,这篇文章我们继续深入,求迷宫的最短路径.

要想求迷宫的最短路径,一个很简单的方法就是再设置一个Min栈,用来放最短路径,每找到一个出口,就将path栈与Min栈进行比较,如果path栈更小,则赋值给Min.

而在上篇文章中,我们将走过的路径做了标记,每走一个坐标,就把那个坐标置为3,直至找到出口.

因此如果用这种标记方式,显然是会出现问题的.

所以我们需要换种标记方式!

最终....我决定,使出口的值为2,每走一步使当前位置标记变为是上一位置标记再加1.

在这种情况下,我们检测当前位置是否可以通过的函数(CheckIsAccess(int*,sz,Pos))就需要做一些微小的调整....

检测通路函数

/*

*函数功能:检测当前路径是否可以通过(最短路径)

*参数说明:

* Maze:迷宫数组

* sz:迷宫大小

* cur:当前位置坐标

* next:下一位置坐标

* 返回值:可以通过返回true,不能通过返回false

*/

bool CheckIsAccess(int *Maze,size_t sz,Pos cur,Pos next){

//如果下一步路径越界

if((next.x<0||next.x>sz)||

(next.y<0||next.y>sz)){

return false;

}

//下一坐标为0

if(0 == (Maze[next.x*sz+next.y])){

return true;

}

//下一坐标为之前走过的路

if((Maze[next.x*sz+next.y]>Maze[cur.x*sz+cur.y]+1)){

return true;

}

return false;

}

寻找最短路径函数

/*函数功能:求迷宫最短路径

*参数说明:

* Maze:迷宫数组

* sz:迷宫大小

* entry:迷宫入口

* path:走过的路径

* Min:最短路径

* 返回值:可以通过返回true,不能通过返回false

*/

//求最短路径

void GetMazeMinPath(int *Maze,size_t sz,Pos &entry,stack& path,stack &Min){

path.push(entry);

Pos cur = entry;

Pos next = cur;

//找到出口

if(sz-1 == cur.y){

//第一次赋值给Min 或者path路径比Min短

if(Min.empty()||path.size()

Min = path;

}

path.pop();

return ;

}

//右

next.x += 1;

if(CheckIsAccess(Maze,sz,cur,next)){

Maze[next.x*sz+next.y] = Maze[cur.x*sz+cur.y]+1;

GetMazeMinPath(Maze,sz,next,path,Min);

}

//左

next = cur;

next.x -= 1;

if(CheckIsAccess(Maze,sz,cur,next)){

Maze[next.x*sz+next.y] = Maze[cur.

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值