review-D

Problem D [1 of 3]
► 出典
: 泉のオリジナル問題
 元ネタは PJ '92 12月号のゲームデザイン館
► 10
マスからなるフィールドに数字のついた石が
いくつかおかれている
► ゲームの目標は石を適当に動かして、すべて
の石を消去すること
4
7
9
Problem D [2 of 3]
► それぞれの石は、その石にかかれた数字だけ
左向きまたは右向きに動く。
 左右の壁にぶつかったときは跳ね返る。
► ただし、次の操作はできない。
 一番左のマスにある石を左向きに動かす。
 一番右のマスにある石を右向きに動かす。
4
7
4
7
Problem D [3 of 3]
► 2 つの石が重なると、それらの石にかかれた数字の和
の下 1 桁がかかれた 1 つの石になる
► 数字が 0 になればその石は消える
3
9
4
3
7
: 与えられた初期状態に対し、全部の石を消去
する最短の手順を求めるプログラムを作成せよ
► 問題
Solution of Problem D [1 of 2]
► ごく典型的な幅優先探索の問題
► 同じ状態が多数生成されるので、それらを重複
して探索しないようにすること
 たとえば、すでに探索した状態を集合型(STL なら
ば set、Java ならば HashSet など)に格納する
Solution of Problem D [2 of 2]
► 細かい部分でのひっかけに注意
 一番左(右)のマスにある石を左(右)向きに移動し
てはならない
 移動したはずの石が残っている??
► 石にかかれた数字の和が
10 の倍数でないと
きは絶対に消去できない
 したがって、この場合は探索をしなくてよい