パズル:人とライオン
形式手法の特徴と活用という解説を組込みシステム技術協会に寄稿した。その際に、例題として人とライオンのパズルを使った。このパズルを少し分析してみたい。
まず、パズルの内容であるが、次のようになる。人が3人、ライオンが3頭、ある川の前にいて、船で渡ろうとしている。船は1艘で、定員は2。人もライオンも船を操縦できる。どういう手順で渡ればよいか。ただし、両岸、船の中で人がライオンより少なくなると、食べられてしまう。
状態遷移系を使って解を求めてみる。まず、船の乗り方は5種類しかない。人2、ライオン2、人1、ライオン1、人1ライオン1。船の中はすべて安全である。
ある岸における人とライオンの数の組合わせは、4通りかける4通りで、16通りがあり得る。その中で安全な組合わせは10通りしかない。船の位置は2通りなので、ある岸における人の数、ライオンの数、船の位置で状態を表すとして、高々20通りと言うことになる。
初期状態は、人3、ライオン3、船はこちら側。終了状態は、人0、ライオン0、船は向こう側。最初の移動による状態を考えてみると、5通りの船の乗り方の中で、安全状態は次のいずれかしかない:
人3ライオン2、人3ライオン1、人2ライオン2
最初の状態の次は初期状態しかなく、残りの状態の次は、後戻りを避けると、次の状態だけである:
人3ライオン2
その後も、次の安全な状態は1又は2通りしかない。意外と正解の数は少ない。図で表現するとこのようになる。






