回溯法以及迷宫问题

概念

什么是回溯法?

回溯法的基本思想:对一个包括有很多结点,每一个结点有若干个搜索分支的问题,把原问题分解为对若干个子问题求解的算法。

我们简单分析一下这句话,其实就是当搜索到某个结点,发现无法再继续搜索下去的时候,就让搜索过程回溯(也称退回)到该结点的上一个结点继续搜索这个结点的其他尚未搜索过的分支,然后一遍一遍重复这个步骤,直到搜索到问题的解或搜索完了全部可搜索分支没有解存在为止

迷宫问题

说到回溯法,就不得不说使用回溯思想最经典的一个问题:迷宫问题。

我们规定:2 为墙壁 0为道路 由图可见,我们有4种不同的通路。 

回溯法以及迷宫问题_第1张图片

我们设置入口为(1,1)出口为(7,7)

①. 我们在主方法里先初始化一个迷宫,用二维数组来实现。

回溯法以及迷宫问题_第2张图片

②. 我们定义四个成员变量,并且设置入口出口坐标

回溯法以及迷宫问题_第3张图片

③. 实现我们迷宫通路的算法,在寻找下一个通路点时,我们就用到了回溯的思想。

回溯法以及迷宫问题_第4张图片

完整的实现代码!

回溯法以及迷宫问题_第5张图片

总结

多练还是最好的途径,迷宫是一个很典型的问题,大家一定要多多理解其中的思路!

下一讲我们就要介绍树的相关知识啦 :)

PS:有什么问题或者不解的地方可以评论,我都会一一就行回复的,如果有错误或者言语不明的地方,还请大神多多指点!

你可能感兴趣的:(回溯法以及迷宫问题)