【逻辑题】狼羊白菜过河
问题
一个人要带狼、羊、白菜过河。河边有一条小船,一次只能载一样东西(人必须划船,所以每次过河最多带狼、羊、白菜中的一样)。
约束:人不在场时,狼会吃羊,羊会吃白菜。怎样把三者全部安全运到对岸?
分析
这是经典的状态约束过河题。每次过河后,留在某一岸的组合不能出现:
| 左岸无人看管时 | 结果 |
|---|---|
| 狼 + 羊 | 狼吃羊 |
| 羊 + 白菜 | 羊吃白菜 |
狼和白菜可以单独相处,问题集中在羊——它既怕狼,又会吃白菜。
直觉上「先运狼、再运羊、再运白菜」行不通:狼到对岸后,羊跟过去会被吃;若先运白菜,羊留在岸上也会把白菜吃掉。
关键在一步反直觉的操作:羊运到对岸后,要再带回来一次,腾出空档让狼或白菜先过去。
解法(7 步)
记左岸为 A,右岸为 B。初始都在 A。
| 步 | 操作 | A 岸 | B 岸 |
|---|---|---|---|
| 1 | 带羊过河 | 狼、白菜 | 人、羊 |
| 2 | 人独自返回 | 人、狼、白菜 | 羊 |
| 3 | 带狼过河 | 白菜 | 人、狼、羊 |
| 4 | 带羊返回 | 人、羊、白菜 | 狼 |
| 5 | 带白菜过河 | 羊 | 人、狼、白菜 |
| 6 | 人独自返回 | 人、羊 | 狼、白菜 |
| 7 | 带羊过河 | (空) | 人、狼、羊、白菜 |
每一步两岸在「人不在场」的一侧都不含非法组合,全部安全到达 B 岸。
另一种走法
步骤 3、4 也可以先运白菜、再带回羊,对称可行:
- 带羊过河 → 2. 人返回 → 3. 带白菜过河 → 4. 带羊返回 → 5. 带狼过河 → 6. 人返回 → 7. 带羊过河
本质相同:中间必须有一次「把羊运回来」,否则羊会与狼或白菜单独相处。
解题技巧
过河类逻辑题的通用思路:
- 列出非法状态——哪些组合不能单独留在某一岸
- 找枢纽角色——本题是羊,它两侧都有冲突,往往需要「运过去再运回来」
- 逐步模拟——每步检查两岸是否安全,而不是凭直觉一次运完
若把「一次只能载一样」改成「船可载两样」,步数会变少;但约束不变时,7 步是已知最短解之一。