斑马谜题

实践练习C++17

简介

斑马谜题是著名逻辑题:五座房子颜色各异,住户国籍、宠物、饮料与爱好也都不同。

题目给出 15 条描述,只有综合全部线索才能解答。

背景 这是一个约束满足问题 CSP:给定可能值集合和限制哪些组合有效的约束。数独也是常见例子。

任务说明

解答斑马谜题,回答两个问题:

  • 谁喝水?
  • 谁养斑马?

谜题

以下 15 条都成立:

  1. 一共有五座房子。
  2. 英国人住红房子。
  3. 西班牙人养狗。
  4. 绿房子住户喝咖啡。
  5. 乌克兰人喝茶。
  6. 绿房子紧挨在象牙色房子的右边。
  7. 养蜗牛的人喜欢跳舞。
  8. 黄房子住户是画家。
  9. 中间房子的住户喝牛奶。
  10. 挪威人住第一座房子。
  11. 喜欢阅读的人住在养狐狸者隔壁。
  12. 画家的房子紧挨养马者的房子。
  13. 踢足球的人喝橙汁。
  14. 日本人下国际象棋。
  15. 挪威人住在蓝房子隔壁。

此外,五座房子的颜色各不相同,住户的国籍、宠物、饮料和爱好也各不相同。

提示:未加约束时有 5!⁵ = 24,883,200,000 种组合,应尽早排除不符合线索的情况。