回溯法总结
本文会引导大家从一个具象的小例子出发来认识回溯法。
![6d335accaed94e4ba2f518bff03c1378.png](https://i-blog.csdnimg.cn/blog_migrate/102c5cc38bfcedf85aed9259d25b79eb.png)
用一句歌词概括回溯法,那就是**“向左向右向前看”**。图中的小蓝要去找小绿,但是小蓝一开始并不知道小绿在哪里,所以他只能摸索着找。先向左走,找到了小红,但不是他想要的,于是退回来;然后向上走,找到了小黄,可也不是他想要的,只能再次退回来;最后向右走,终于找到了小绿,结束。
0.回溯法的本质
先说结论,回溯法的本质是一棵N叉树的遍历。N叉树中除叶子节点外每个节点都有N个孩子节点,回到上图,如果将小蓝看做树中节点的话,那小红、小黄、小绿便是小蓝的孩子节点。如果有N个和小蓝同级的节点,并且他们连在同一个父节点上,以此重复,便可得到回溯法的解空间树。而小蓝在丁字路口的向左、向上、向右以及退回的操作便相当于回溯法中的选择和撤销选择,关于选择和撤销选择的概念在后文详解介绍。
1.回溯法框架
我们把小蓝找小绿的难度加大,如下图所示:
![91c66903309a0f8d243221bcbf7188a0.png](https://i-blog.csdnimg.cn/blog_migrate/f8ceff84aebd8f798a85a3be32b43e79.png)
小蓝初始站在Root位置,在他面前是一个十字路口,有1、2、3、4四个方向,并且沿每个方向走,又会遇到丁字路口,分别是5、6,7、8,9、10,11、12。小蓝的目标是找到12号小绿。我们先用文字来描述一下搜索过程。
- 进入方向1 (选择)
- 不是12号小绿 (结束条件)
- 进入方向5 (选择)
- 不是12号小绿 (结束条件)
- 从方向5退回 (撤销选择)