最近、私は述べた問題に遭遇しました。
*
,.
,C
の迷路を想定します。 *
は壁面を表し、.
/C
が許されます。 C
と記されている点は1つだけです。ボットが許可されたポイントのいずれかに立つと、ボットが許可されたポイントから開始する場合、少なくとも1回はC
を通過する一連のコマンド(たとえば、LDDRU
またはLLLRRDU
など)が存在します。
例:すべてのスタートポイントから解決した迷路
******
*.C..*
**.***
*....*
******
コマンド:RLLURUU
今、私は(最短経路のため)DFS/BFSを使って迷路を解決する方法を知っています。しかし、誰かがこのような問題をどのように進めるかについてのヒントを提供することができますか?
EDIT:次の移動が壁/外の迷路にある場合、無視されます。そして通常通りL
は左R
です。右はU
です。D
は下がっています。
最も遠くに移動できるのは3ステップです。例えば、 LLLでは、グリッド内の3つの位置にしか配置できません。別のRの後に、あなたは垂直廊下の3つの位置にいることができます。あなたはUUの後にCを渡したことを確信しています。一般的に、あなたができるポジションの数を減らし、あなたの可能なすべてのロボットを追跡し、 「壁があれば、ロボットは動かない」というルール。 2つの可能なロボットが同じ正方形に終わるたびに、それらのうちの1つを取り除く。 – m69
@ m69、お返事ありがとうございます。しかし、もっと明確にするために、与えられた例を使用し、答えに到着するあなたの論理を説明することができます....ありがとう! – yobro97
3行に9つの可能な位置があります。 LLLの後では、ロボットはその行の一番左の位置にあるので、今度は3つの可能な姿勢しか持たない。別のRの後で、3つのロボットは第2左の位置(垂直回廊)にある。 UUの後ではすべてがC上に終わるでしょう。 – m69