川渡り問題
禁止されている状態にならないように移動させていれば、ほぼ一本道で解けてしまうこともある。
下記の点を考えるとうまくいくことが多い。
ボートをこげる人を確保する。
対岸に渡した人(物)を,後でもう一度連れて帰る。
最初は,2人以上(または1人と何か)で渡るしかない。 もし1人だけで渡ると,その1人が戻って来るしかないので,始めの状態に戻ってしまうから。
また、コンピュータプログラムで(普通のプログラミング言語で、あるいは論理プログラミングや何らかのソルバー等で)コンピュータに解かせようとする場合、問題の文としては明示されない(が、論理的に詰めてゆくと必要な)制約や可能な移動についての規則の追加が必要なこともある。
↑ 一例として、ナイーブにコードを書くと宣教師の問題で「宣教師が0人」という状態を「宣教師の方が人数が少ない」として誤って不正解としてしまう、といったものがある。
3人の宣教師と3人の先住民が川岸にいる。川には2人まで乗れるボートが1艘ある。
ボートを漕げるのは宣教師のうちの1人と、先住民のうちの1人だけである。
どちらかの岸で先住民の数が宣教師の数より多くなると、先住民は反旗を翻し宣教師に襲い掛かる。
全員が無事に対岸に渡るにはどうしたらよいか?
en:Missionaries and cannibals problem