走迷宫之深度优先搜索
Posted 樽中月的分享
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了走迷宫之深度优先搜索相关的知识,希望对你有一定的参考价值。
续前文。
现在我们多了一个实际需求,输出所有走法,以及最短路径。
这里提供一种思路:
创建一个一维结构体数组,每走一步,将该位置的坐标放入数组,返回时将该坐标从数组中去掉,最后到达正确位置的时候,将数组中元素打印出来。
下图是一维结构体数组s,因为它是静态的,所以还需要一个变量end来指示下一次放入数组的位置,找到一种走法的时候,end还可以作为循环遍历的结束条件。
走完四个方向的代码就成了下图:
递归的结束条件就成了:
将添加了功能的代码运行一下,给出一个5行4列的迷宫,并输入地图,将所有从起点到终点的走法都输出。
看结果可知,输出了所有的走法,有的走法用了9步,有的用了7步,最后输出最少步数,7。
换一个5行5列的迷宫,所有的走法和最短路径如下图。共有4种走法,其中最短的用了8步。
重复一遍,深度优先搜索就是遍历所有的方法的算法。至于全部找到后要干什么,那就根据需要添加数据结构和代码。
1970年,既是同事又是同学的算法设计科学家约翰·E·霍普克洛夫特(John E. Hopcroft)和罗伯特·陶尔扬(Robert E Tarjan)在斯坦福大学研究图的连通性(图中任意两点是否都是相连的)和平面性(图中所有的边都要互不交叉)问题(这些问题在当时具有很高的应用价值,比如印刷电路板的设计)时,提出一种新的对图进行搜索的思路,比起普通的遍历算法,深度优先搜索算法是线性的,当问题规模扩大一倍,运行花费的时间也才提高一倍。1986年,二人因为深度优先搜索获得了图灵奖。直到今天,深度优先搜索仍然在信息检索,人工智能方面发挥着重要的作用。
以上是关于走迷宫之深度优先搜索的主要内容,如果未能解决你的问题,请参考以下文章