一、迭代加深
深度优先搜索每次选定一个分支,然后往下搜索,直到递归边界
才回溯。这种策略有一点缺陷,那就是当搜索树的分支数目特别
多,并且答案在某个较浅的节点上,如果dfs在一开始就选错了分
支,那就会在没有答案的深层次浪费时间
当搜索树规模随着层次的深入增长很快,并且能
够确保答案在一个较浅的节点上时,就可以使用
迭代加深搜索的深度优先搜索来解决问题
二、例题
Addition Chains
题目描述
原题来自:ZOJ 1937
已知一个数列a0,a1...am(其中 a0 = 1 , am = n , a0<a1<a2<...<am−1<am)。对于每个 k,需要满足 ak=ai+aj(0≤i,j≤k−1,这里 i 与j可以相等)。
现给定 n 的值,要求 m的最小值(并不要求输出),及这个数列每一项的值(可能存在多个数列,只输出任一个满足条件的就可以了)
输入
多组数据,每行给定一个正整数 n 。
输入以 0 结束。
输出
对于每组数据,输出满足条件的长度最小的数列。