Description:
#の形の盤面に、3種類のコマが8個ずつ、計24個のコマが置かれている。
コマは、例のように8種類の操作(A-H)によって動かすことが出来る。
コマを動かし、中心の8マスのコマを同じ種類で揃えたい。
最短の操作手順を答えよ。
もし最短のものが複数あるなら、アルファベット順で一番早い物を答えよ。
もし、与えられた盤面が既に条件を満たしているなら、"No moves needed"と答えよ。
また、中央に来るコマの種類も答えよ。
Answer:
幅優先的な探索ではメモリが足りなくなってしまう為、反復深化で枝刈り付きのDFSを行う。
枝刈り無しでは8^(最短手順の長さ)となるはずだが、盤面の良い評価関数を書くことが出来れば、劇的に探索空間は小さくなる。
ある種類で中央を固めるのに必要な最低手数 >= 各ラインにおける、「両端から2つずつの位置から、目的の種類のコマを追い出すのに必要な手数」の総和
が成り立ち、尚且つこれがかなり良い見積もりとなっている為、消費手数+見積もりが最大深度を超えた時に枝を刈れば、時間に間に合わせることが出来る。
Source: