3 个商人 + 3 个仆人 · 一只小船 · 11 步最优解 · 完整动画演示
从问题描述到状态空间搜索,一步看懂商人过河的最优解
3 个商人带着 3 个仆人要乘小船渡河。小船每次最多容纳 2 人,必须有人划船。
核心约束:在任何一岸,只要有商人在场,仆人的数量不能多于商人,否则商人会被仆人加害。
目标:找到让所有 6 个人都安全到达对岸的最少渡河方案。
用三元组 S = (m, s, b) 表示状态:
状态空间共 4×4×2 = 32 种,其中合法的安全状态仅有 16 种。
合法状态条件:
每次乘船决策 d = (dm, ds),满足 1 ≤ dm + ds ≤ 2,共 5 种:
由于状态空间很小,使用 广度优先搜索 可在毫秒内找到最优解:
得到的最优解 = 11 步,是该问题的理论下界。
| 步 | 方向 | 乘船人 | 左岸(商,仆) | 右岸(商,仆) | 船 |
|---|