第3-4课:爱因斯坦的思考题(下)

本文深入探讨了如何实现搜索算法解决爱因斯坦的思考问题,包括枚举所有状态和状态正确性判断。算法通过递归和循环方式处理五种属性的全排列,同时针对题目中的特殊规则进行处理,如挪威人住在第一个房子,中间的人喝牛奶等。最终,通过检查绑定关系和相邻关系验证解的正确性,从近两亿个组合中找到唯一正确答案,展示了穷举法的局限性。
摘要由CSDN通过智能技术生成

接上一课,我们继续分析搜索算法是如何实现的。

搜索算法实现

与其他穷举类算法一样,本问题的穷举法的实现也包含两个典型过程,一个是对所有状态的穷举过程,另一个是对状态的正确判定过程。本问题的穷举搜索过程明显比之前的几个题目复杂,因为每个状态有 5 个类型,每个类型都要对 5 个值进行排列组合。

枚举所有状态

前几课介绍了几个线性空间的搜索和树状空间的搜索的例子,这些例子中的状态都比较简单,可以边遍历边生成新状态,并且状态的合法性判断也比较简单。本题则有些特殊,需要对不同类型的元素分别用穷举法进行枚举遍历,然后再将枚举遍历的结果按照组的关系组合起来才能得到一个状态(完整的二维表),并且组合的方法不是线性关系的组合,而是类似阶乘的几何关系的组合。

状态遍历算法的具体思路就是按照 group 中的元素顺序,依次确定状态二维表中各个元素的值。首先对房子根据颜色组合进行穷举,每得到一组房子颜色组合后,记录到状态二维表的第一列,然后在此基础上对住在房子里的人的国籍进行穷举,将国籍的穷举结果记录到二维状态表的第二列,同时将国籍穷举得到的集合与房子颜色的结果做排列组合,并在这个组合结果的基础上,继续对饮料类型进行穷举和排列组合。以此类推,直到穷举完最后一种类型得到完整的状态二维表。其遍历组合的过程如图(1)所示,在这么多组合的结

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

吹泡泡的小猫

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值