棋盤上a點有乙個過河卒,需要走到目標b點。卒行走的規則:可以向下、或者向右。同時在棋盤上c點有乙個對方的馬,該馬所在的點和所有跳躍一步可達的點稱為對方馬的控制點。因此稱之為「馬攔過河卒」。
棋盤用座標表示,a點(0, 0)、b點(n, m)(n, m為不超過20的整數),同樣馬的位置座標是需要給出的。現在要求你計算出卒從a點能夠到達b點的路徑的條數,假設馬的位置是固定不動的,並不是卒走一步馬走一步。
這道題由於是求路徑總數,我使用了深搜。首先找出馬的控制點,也一定要標記馬的位置。讓後就從起點開始走,每一次前進都有兩次走法,分別考慮。當無法前進時回到上一步嘗試另一種方法(回溯),走到終點計數器就加一併回溯。
具體見以下**和每乙個細節的注釋
#includeint tot,x,y,n,m,f[8][2]=,,,,,,,};//馬的8種走法
bool f[25][25]=;
void dfs(int x1,int y1)//深度優先搜尋
//到達終點記錄並回溯
if(x1+1<=n&&!f[x1+1][y1])//向下走,判斷邊界和標記
if(y1+1<=m&&!f[x1][y1+1])//向左走 }
int main()
馬攔過河卒 NOIP
馬攔過河卒 noip time limit 7000ms memory limit 65536k description 如圖,a點有乙個過河卒,需要走到目標 b點。卒行走規則 可以向下 或者向右。同時在棋盤上的任一點有乙個對方的馬 如上圖的c點 該馬所在的點和所有跳躍一步可達的點稱為對方馬的控制點...
遞推2 過河卒(Noip2002)
寫出遞推公式就ok了,具體程式設計還是很簡單的 過河卒 noip2002 問題描述 棋盤上a點有乙個過河卒,需要走到目標b點。卒行走的規則 可以向下 或者向右。同時在棋盤上c點有乙個對方的馬,該馬所在的點和所有跳躍一步可達的點稱為對方馬的控制點。因此稱之為 馬攔過河卒 棋盤用座標表示,a點 0,0 ...
NOIP 2002 過河卒(DP遞推)
棋盤上a點有乙個過河卒,需要走到目標b點。卒行走的規則 可以向下 或者向右。同時在棋盤上c點有乙個對方的馬,該馬所在的點和所有跳躍一步可達的點稱為對方馬的控制點。因此稱之為 馬攔過河卒 棋盤用座標表示,a點 0,0 bb點 n,m n,m為不超過2020的整數 同樣馬的位置座標是需要給出的。現在要求...