首先放一道例题:
给出n个数,以及目标m,需要用这n个数中的若干个数加起来等于m,问所有方案中使用的数的数量最少的方案是什么。
显然,对于这道题,我们并不知道搜索的深度会是多少,如果放任程序像野狗一样满场子乱搜,那么肯定TLE无疑了。
由于需要记录答案,所以用广搜的话空间可能会炸。
于是,我们只能用深搜,为了不让程序这条野狗跑的太远,我们人为地做一条缰绳,让它只能在固定范围内移动,等它搜完这个范围之后,如果没有找到答案,再把缰绳伸长一些,继续找。
这就是——迭代加深搜索。
在不知道搜索的深度的时候,我们就需要人为地控制深度,当设定深度为deep时如果没找到答案,我们就让deep+1,然后重新搜索一次。
虽然这样有一点点缺陷,也就是每次搜索deep+1时,会把深度为deep时遍历过的地方又遍历一次。但由于深搜的时间复杂度是随着深度成指数级增长的,所以重新遍历的这一点点根本不算什么。
回到上面那个例题,具体的做法已经很明显了,我们枚举每一次使用多少个数来相加,然后在此基础上跑深搜即可。