10×10 棋盤,己方車、馬、炮各一枚,敵方將軍和士兵(靜止)。求最少步數殺死將軍。棋子走法同象棋,可重複經過格子,但三子位置組合狀態不可重複。
狀態 = (車x, 車y, 馬x, 馬y, 炮x, 炮y),6 維標記數組 vis[11][11][11][11][11][11]。
展開:每步移動一枚棋子。
車:四方向滑動,遇邊界/障礙停止。
馬:8 個「日」字目標,檢查蹩腿(腿被車/炮/將/士阻擋)。
炮:四方向滑動,需恰好越過一個棋子(車/馬/炮/將/士)才能捕獲目標。
殺將判定:車/炮同行列且中間無子;馬按走法能到將位置。
預計算馬腿偏移;射線檢測用循環;狀態編碼可壓縮為 32 位整數用 unordered_set 節省內存。