a.表示:搜索算法是基于待搜索的数据结构进行的,组织数据结构最高效的有三种方法:线性表、树(图)、动态生成的结构。

1.回溯法:简单地讲就是深度优先搜索,但是在搜索的过程中的中间节点上进行判断是否要继续搜索它的子树,否则返回父节点继续开始其他部分的深度优先搜索。回溯法的基本过程是:定义解空间,即用穷举法列出所有可能解的形式;然后视每一个元素为节点或者分支构建一个空间树;最后在该结构上进行回溯搜索。

如果问题类似于排列问题和八皇后这样的问题,浪费的空间较多,这里引入了排列的思想,即排列树回溯法,虽然本质上是树的思想,但是也可以看成是重复利用一维数组,实现一个保存着隐形的队列的广度优先搜索算法。

比如八皇后问题,按照树的思想,每次都要进行遍历,并且入队,然后出队、分析、向下、回溯等,但是这个树的广度优先遍历显然可以用一位数组实现,不需要队列,因为每一个节点下的分支数和分支选择值完全相同,这样每次只要从1到n确定数组元素值是否满足约束条件,满足则继续对下一个元素赋值,如果全部遍历完了,还要输出全部元素以及重新考虑最后一个元素,相当于访问到了叶子节点,需要返回上一层,继续访问叶子的兄弟;使当前元素也就是最后一个元素增1(对于第n个元素肯定导致约束的违反),不满足约束则:不断使该元素增1,直到满足,即不断判断它右边的兄弟;或者无法用自增的方法满足条件(总是不满足约束),使下标减一,考虑之前的元素,即在树上返回上一层,继续循环。在满足约束时判断是否要输出全部解,或者增加下标继续循环判断下一层