---恢复内容开始---
http://wenku.baidu.com/view/63e7b8270066f5335a812142.html
有一个二维数组,0表示路,-1表示墙,求其中任意两点的最短路径。
我们先看,怎么求一条路径:求两点路径是一个数据结构上的典型的迷宫问题,很多数据结构的书上都有介绍,解决办法如下:
从一点开始出发,向四个方向查找,每走一步,把走过的点的值+1(即本节点值+1),防止重复行走,并把走过的点压入堆栈(表示路径),如果遇到墙、或者已走过的点则不能前进,如果前方已经无路可走,则返回,路径退栈,这样递归调用,直到找到终点为止。
迷宫如下图所示:
从(2, 1)到(6, 8),程序如下所示:
这时,我们经过运算,到达终点,有44步之多。如果我们调整调用offset的顺序,即先左右,后上下,可能会得到更短的路径,但无法确保在任何情况下都能得到最短路径。
得到最短路径的方法,解决方法如下:
每走一步,就对前方的节点赋值为此节点+1,走过的路径也可以重复行走。但有一个条件,就是本节点+1必须小于已走过的节点的权值(墙不能走),这样走遍所有的节点,记录最短的路径。
主要修改了以下两个函数:
我上传了两个工程,求一条路径的程序点此下载,求最短路径的程序点此下载。
文章结束!愿它对您有所帮助
---恢复内容结束---
http://wenku.baidu.com/view/63e7b8270066f5335a812142.html
有一个二维数组,0表示路,-1表示墙,求其中任意两点的最短路径。
我们先看,怎么求一条路径:求两点路径是一个数据结构上的典型的迷宫问题,很多数据结构的书上都有介绍,解决办法如下:
从一点开始出发,向四个方向查找,每走一步,把走过的点的值+1(即本节点值+1),防止重复行走,并把走过的点压入堆栈(表示路径),如果遇到墙、或者已走过的点则不能前进,如果前方已经无路可走,则返回,路径退栈,这样递归调用,直到找到终点为止。
迷宫如下图所示:
从(2, 1)到(6, 8),程序如下所示:
这时,我们经过运算,到达终点,有44步之多。如果我们调整调用offset的顺序,即先左右,后上下,可能会得到更短的路径,但无法确保在任何情况下都能得到最短路径。
得到最短路径的方法,解决方法如下:
每走一步,就对前方的节点赋值为此节点+1,走过的路径也可以重复行走。但有一个条件,就是本节点+1必须小于已走过的节点的权值(墙不能走),这样走遍所有的节点,记录最短的路径。
主要修改了以下两个函数:
我上传了两个工程,求一条路径的程序点此下载,求最短路径的程序点此下载。
文章结束!愿它对您有所帮助