ICPC国内予選2005年 F問題 : Cleaning Robot

問題. Cleaning Robot

サイズが横幅  W ・縦幅  H の部屋がある.部屋のタイル上に1つの掃除ロボットといくつかの障害物が置かれており,各タイルは綺麗か汚れている.掃除ロボットは上下左右の障害物の無いタイルへ移動することができる.すべてのタイルを綺麗にするために移動する最小距離を求めよ.

制約 1 \le W, H \le 20, 汚れたタイルの数  \le 10

解法1. 幅優先探索 + 全探索

頂点集合がロボットの初期座標と汚れたタイルの座標の集合となる完全グラフ  K_n を作成する.このとき,各辺の重みは座標間の最短距離として幅優先探索で求める.もし,ある2頂点間が移動不可能ならばすべてのタイルを綺麗にすることができないので終了する.
問題の答えは  K_n 上でロボットの初期座標を始点とする重み和最小のハミルトン路である.ハミルトン路とはすべての頂点を訪れるパスのことである.今回は,頂点数が高々10なのでパスを全探索して重み和最小のものを見つける.全探索の実装はnext_permutationを用いた.

計算時間 O(n^2HW + n!)

解法2. 幅優先探索 + Bit DP

解法1の完全グラフを作成するところまでは一緒である.異なるのは重み和最小のハミルトン路を見つけるところである.もし,掃除ロボットが最初の位置に戻ってくるとしたら巡回セールスマン問題(Traveling Salesman Problem; TSP)となる.TSPを解く現在知られている高速な厳密解法として部分集合上動的計画法(dynamic programming over subsets)がある.競プロの世界では部分集合をbitで持つことからBit DP [1]と呼ばれている.今回の問題は始点が決まっていて閉路である必要がないのでTSPの解法を修正して解いている.

計算時間 O(nHW + 2^n n^2)

まとめ

TSPはNP困難です.