-4

私はインターネットや他の場所(私の本を含む)を見ましたが、探している答えが得られないようです. この恐ろしい時間 (午前 5 時 25 分) まで私を眠らせなかった大きな部分は、後戻りです。これはどのように機能しますか?四方八方でブロックされたときに「リターン」を入力すると、魔法のように最後の動きが元に戻りますか?あなたが「戻る」とすぐに、あなたの再帰は完全に巻き戻されるといつも思っていたので、信じられないことに頭を振っています。

また、コードが非常に長いことに少し不満を感じています。私の先生は、それは短い解決策であるはずだとクラスに言いました。さて、迷路をロードし、物事をチェックし、方向をチェックするためのアルゴリズムを作成する必要がありました (再帰的に変更しただけですが、ほぼ 100% 間違っていると確信しています)。オブジェクトの配列を初期化し、テレポート先のハイパースペース スポットを探すための特殊なメソッドを記述することは言うまでもありません。とにかく、ここにあります。私はそれのいくつかが何もしないことを知っています。結局のところ、私はまだそれで終わっていません。http://pastebin.com/5wknVCWaはい、実際には少し大きいので、そこに貼り付けます。300行以上。

4

1 に答える 1

3

バックトラッキング アルゴリズムは短いです。再帰的である必要はありません (しかし、その方が見栄えがよくなります)。あなたが行う主な作業は、現在の決定がまだ大丈夫かどうかをチェックする拒否関数を書くことです。そうでない場合は、前の決定に戻ります (つまり、単一レベルの再帰から戻ります)。

迷路では、拒否関数は、壁に足を踏み入れたばかりか、グルーに食べられた可能性があります。承認機能は、迷路を終了して完了した (または王子を救出したなど) ことを意味する可能性があります。

http://en.wikipedia.org/wiki/バックトラッキング

 procedure bt(c)
   if reject(P,c) then return
   if accept(P,c) then output(P,c)
   s ← first(P,c)
   while s ≠ Λ do
     bt(s)
     s ← next(P,s)
于 2013-05-16T10:57:08.640 に答える