题解:UVA10503 The dominoes solitaire
思路:
经典 DFS + 回溯剪枝。
毕竟一看 \(n\leq14\),
第一时间肯定想到的是暴搜。
回溯法是一种经常被用在 深度优先搜索(DFS) 和 广度优先搜索(BFS) 的技巧。
其本质是:走不通就回头。
—— OI Wiki
在这道题中,我们的 DFS 每枚举一种状态都判断一次该状态是否合法,合法时就继续向下搜,否则就直接进行回溯。
因为每当我们当前的状态不合法时,这个状态再怎么往下搜也都是不合法的,所以我们就可以直接剪掉这个状态。
这就是所谓的剪枝。
算法设计:
知道了这些我们就可以设计一下我们的搜索算法啦。
当我们每次递归时都需要获取一个编号并且寻找含有这个编号的骨牌,然后再以新骨牌的第二个编号进行下一次的递归。
如果搜索完了,但是当前位置的标号不为结束编号时,我们无法再进行下一次搜索,我们就可以回溯掉。如果搜索完了,并且该位置的标号和结束编号相同时,我们就可以结束递归。
有了这些,代码写起来还是蛮简单的。
AC 代码:
写写搜索可以锻炼码力,这里我就不给了。

浙公网安备 33010602011771号