不同问题的穷举法算法实现最大的差异点就是搜索算法的不同,前几课介绍了线性空间的搜索、树状空间的搜索,这一课我们再介绍一种求解问题的搜索算法,其搜索的空间是一个二维表,对二维表中的每个元素进行枚举遍历,依次确定每个表格元素的值,当二维表中所有表格元素的值都确定后,检查其结果是否符合问题的解的要求,如果满足要求,则输出一个结果,如果不满足要求,则按照一定的顺序继续遍历各个表格元素的值。这也是一种典型的解空间搜索方式,通过对这个问题的理解,未来遇到类似的问题,或三位表空间的问题,都可以用类似的方法设计搜索算法。
问题介绍
这是一个很有趣的逻辑推理题,传说是爱因斯坦提出来的,他宣称世界上只有 2% 的人能解出这个题目,传说不一定属实,但是这个推理题还是很有意思的。题目是这样的,据说有五个不同颜色的房间排成一排,每个房间里分别住着一个不同国籍的人,每个人都喝一种特定品牌的饮料,抽一种特定品牌的烟,养一种宠物,没有任意两个人抽相同品牌的香烟,或喝相同品牌的饮料,或养相同的宠物,问题是谁在养鱼作为宠物?为了寻找答案,爱因斯坦给出了 15 条线索:
- (1)英国人住在红色的房子里
- (2)瑞典人养狗作为宠物
- (3)丹麦人喝茶
- (4)绿房子紧挨着白房子,在白房子的左边
- (5)绿房子的主人喝咖啡
- (6)抽 Pall Mall 牌香烟的人养鸟
- (7)黄色房子里的人抽 Dunhill 牌香烟
- (8)住在中间那个房子里的人喝牛奶
- (9)挪威人住在第一个房子里面
- (10)抽 Blends 牌香烟的人