首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C++ >> 關於C++

HDU 3004: 中國象棋 BFS - 車馬炮殺將最少步數

     編輯:關於C++

問題描述

10×10 棋盤,己方車、馬、炮各一枚,敵方將軍和士兵(靜止)。求最少步數殺死將軍。棋子走法同象棋,可重複經過格子,但三子位置組合狀態不可重複。

狀態與 BFS

狀態 = (車x, 車y, 馬x, 馬y, 炮x, 炮y),6 維標記數組 vis[11][11][11][11][11][11]。
展開:每步移動一枚棋子。
車:四方向滑動,遇邊界/障礙停止。
馬:8 個「日」字目標,檢查蹩腿(腿被車/炮/將/士阻擋)。
炮:四方向滑動,需恰好越過一個棋子(車/馬/炮/將/士)才能捕獲目標。
殺將判定:車/炮同行列且中間無子;馬按走法能到將位置。

優化

預計算馬腿偏移;射線檢測用循環;狀態編碼可壓縮為 32 位整數用 unordered_set 節省內存。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved