この種のパズルを解くためのプログラムを作成するにはどうすればよいでしょうか。緑色の正方形は木を表しており、次のように植える必要があります。
メイングリッドのセル内の数字は関係ありません。
必要なツリー量が1で、ツリーが含まれている行と列、および各ツリーの周囲に9x9の正方形がある行と列をすぐに削除できます。その後、行き詰まりました。
アイデアをありがとう。
このようなパズルを解くとき、あなたができることが2つあります:
この特定のパズルの場合、私が見ることができる最初のカテゴリに分類される操作は次のようになります。
これらはすべて、最初に開始するときにすべての行、列、およびツリーについてチェックする必要があります。その後、植樹時に最初の2つをすぐに行うことができます。
2より大きい行番号と列番号が許可されている場合は、最後の4つのルールのより一般的なバージョンを作成する必要があります。または、すべての有効な組み合わせをチェックして、それらのいずれかが常にツリーを持っているか、またはまったく持っていないかを確認する単純なブルートフォースが機能します。
2番目のカテゴリでは、深さ優先のツリー検索を実行します。ノードごとに、次のことを実行する必要があります。
3.と4の単純な方法は、マークされていないすべての子を追加し、ランダムに(または任意の順序で)1つを選択して展開することです。しかし、ヒューリスティックを使用すると、ほぼ確実にうまくいくことができます。
すぐに頭に浮かぶのは、3番目のステップで、単独でそれを満たすツリー配置の可能な限り少ない組み合わせで行または列を選択することです。たとえば、上から5番目の行には、それを満たす5つの可能な組み合わせがあります。次に、これらの組み合わせごとに1つの子のみを追加します。 oneは間違いなく正しいので、拡張する子は5つだけになり、そのうちの1つが確実に正しい答えになります。