私は最近、ZoombinisのLogical Journeyの再リリースをプレイしており、さまざまなパズルを解決できるコンピューターアルゴリズムを実装しようとしています。キャプテンケイジャンのフェリーボートパズルにアプローチする方法に固執しています。
なじみのない人にとっては、Zoombiniは髪、目、鼻、足の4つの属性を持つクリーチャーです。これらの属性にはそれぞれ5つの可能な値があります。たとえば、Zoombiniの足は、車輪、ローラースケート、スニーカー、バネ、またはプロペラです。乱雑な髪、メガネ、緑の鼻、スニーカーを備えたZoombiniの例を次に示します。
フェリーボートパズルのタスクは、フェリーボートの16席に16個のZoombinisのコレクションを配置することです。配置は、直交する隣接する2つの座席は、少なくとも1つの機能を共有するZoombinisが占有する必要があるという規則に従う必要があります。2 Zoombinisが異なるの髪、異なる目、鼻異なる、持っている場合と、互いに異なる足を、彼らは隣同士に座ってないかもしれません。
座席の配置はレベルによって異なります。具体的には、「非常に難しい」レベルに注目しましょう。このレベルでは、16席が4行4列のグリッドに配置されます。15個のZoombinisが合法的に着席しているが、右のZoombiniと機能を共有しないため、ドックに立つ最後のZoombiniを最後の空いている座席に配置することはできません。
16個あります!およそ21兆のZoombinisの座席への割り当てが可能です。したがって、すべての可能な割り当てを実行して、それが合法かどうかを確認するだけでは実用的ではありません。この問題に賢明にアプローチするために使用する可能性のあるヒューリスティックは何ですか?
Subgraph Isomorphism Problem
。問題は、あるグラフを別のグラフで見つけることです。あなたの場合、サブグラフは座席(エッジは隣接関係)であり、親グラフはzoombinisであり、接続は共有特性の存在です。一般に、問題はNP完全であり、通常はバックトラッキングによっても行われますが、いくつかの特別な場合(グラフが非常にうまくいく可能性があります)、多項式または線形解でさえ可能です。