2

地域のプログラミング コンテストのプログラミング問題を復習しています。

問題はhttp://www.vlaamseprogrammeerwedstrijd.be/2011/opgaves/cat2-2011/loodgieter.pdf からダウンロードできます。オランダ語ですが、写真がわかりやすいです。

入力として am*m グリッドを受け取りますが、いくつかのパイプといくつかの欠けているスポット (疑問符) があります。残りのパイプはグリッドに配置して、他のパイプと接続する必要があります。

各パイプは文字として表されます (2 ページの図を参照)。文字「A」の値は 1、「B」の値は 2、..

Javaでバックトラックしてこの問題を解決する方法を知っている人はいますか?

4

1 に答える 1

0

ゲームに関するすべての知識を収集することをお勧めします。

  • 境界はより新しく接続されています
  • パイプは互いに接続されています
  • ? オランダ語はよくわかりません ;)

すべてのセルでパズルを説明する表現を選択します 必要な接続 (既に配置されたピースによって暗示されます) があり、接続である場合とない場合があるいくつかのオプションである可能性があります

ピースがボードに配置されたときにこれらの属性を更新する配置ハンドラーを作成します

部品を特定の位置に配置できるかどうかを決定するロジックを作成します。

この時点で、空のボードから始めて、知っているパーツを配置します

次のことを行う再帰を開始します。

  • 最初の空のセルを選択します
    • 存在しない場合は、現在のボードを出力にコピーします(解決策)
  • 利用可能なピースごとに、適合するかどうかを試します
    • もしそうなら、それを置き、それ自体を呼び戻します

まとめていただければ幸いです。これは素敵なパズルです。私が毎日遊んでいることに注意しください。

于 2012-07-16T21:31:12.493 に答える