问题

一个人要带狼、羊、白菜过河。河边有一条小船,一次只能载一样东西(人必须划船,所以每次过河最多带狼、羊、白菜中的一样)。

约束:人不在场时,狼会吃羊羊会吃白菜。怎样把三者全部安全运到对岸?

拖动物品上船,再把船拖到对岸;也可点按钮过河。

分析

这是经典的状态约束过河题。每次过河后,留在某一岸的组合不能出现:

左岸无人看管时结果
狼 + 羊狼吃羊
羊 + 白菜羊吃白菜

狼和白菜可以单独相处,问题集中在——它既怕狼,又会吃白菜。

直觉上「先运狼、再运羊、再运白菜」行不通:狼到对岸后,羊跟过去会被吃;若先运白菜,羊留在岸上也会把白菜吃掉。

关键在一步反直觉的操作:羊运到对岸后,要再带回来一次,腾出空档让狼或白菜先过去。

解法(7 步)

记左岸为 A,右岸为 B。初始都在 A。

操作A 岸B 岸
1带羊过河狼、白菜人、羊
2人独自返回人、狼、白菜
3带狼过河白菜人、狼、羊
4带羊返回人、羊、白菜
5带白菜过河人、狼、白菜
6人独自返回人、羊狼、白菜
7带羊过河(空)人、狼、羊、白菜

每一步两岸在「人不在场」的一侧都不含非法组合,全部安全到达 B 岸。

另一种走法

步骤 3、4 也可以先运白菜、再带回羊,对称可行:

  1. 带羊过河 → 2. 人返回 → 3. 带白菜过河 → 4. 带羊返回 → 5. 带狼过河 → 6. 人返回 → 7. 带羊过河

本质相同:中间必须有一次「把羊运回来」,否则羊会与狼或白菜单独相处。

解题技巧

过河类逻辑题的通用思路:

  1. 列出非法状态——哪些组合不能单独留在某一岸
  2. 找枢纽角色——本题是羊,它两侧都有冲突,往往需要「运过去再运回来」
  3. 逐步模拟——每步检查两岸是否安全,而不是凭直觉一次运完

若把「一次只能载一样」改成「船可载两样」,步数会变少;但约束不变时,7 步是已知最短解之一。