農夫と山羊と狼とキャベツの問題 http://www.geocities.jp/m_hiroi/puzzle/farmer.html の場合、 深さ優先 移動できるキャラがあれば移動してみる方式 過去の各フェーズの状態を全て覚えておく。過去と同じ状態になる場合、移動しないためと、結果表示のため 農夫の位置(右岸か左岸か)を覚えるのではなく、フェーズのたびに移動方向を右、左、右、左、と固定的に切り替えている(よって、このコードでは農夫が複数いるような問題には使えない) search(){ foreach 全てのキャラについて { if(対岸に移動できるか?過去の状態に一致しないか?) { 移動後状態を覚える。 完了(全部対岸に移動)なら、完了。 search(); } } } 幅優先 遷移可能な状態が見つかった場合、すぐに遷移してみるのではなく、キューに放りこんでおく方式 メインロジックは、