problem description
棋盤上a點有乙個過河卒,需要走到目標b點。卒行走的規則:可以向下、或者向右。同時在棋盤上c點有乙個對方的馬,該馬所在的點和所有跳躍一步可達的點稱為對方馬的控制點。因此稱之為「馬攔過河卒」。棋盤用座標表示,a點(0,0)、b點(n,m)(n,m為不超過15的整數),同樣馬的位置座標是需要給出的。現在要求你計算出卒從a點能夠到達b點的路徑的條數,假設馬的位置是固定不動的,並不是卒走一步馬走一步。
input
一行四個資料,用空格分隔,分別表示b點的座標和馬的座標。
output
乙個資料,表示所有的路徑條數。
example input
6 6 3 3
example output
think: 馬走「日」字, **實現起來就是對位置座標x、y,進行+-1、2操作。是馬可以一步到達的點(包括一開始馬的座標)。分析可知從某個點到達終點b的路徑條數是b點正上+左邊兩個點的路徑條數和。比如從(1,1)到(2,2),根據題目裡卒的行走規則有兩條路徑可走,1+1 = 2嘛。那麼問題來了,從起始位置(0,0),到終點b的過程中如果遇到「馬的控制點」怎麼辦?思考一下~肯定是從馬的控制點出發的路徑數為0了,因為相當於「出發點」不存在了。。。分析完了之後,就知道要開個兩個二維陣列,乙個儲存地圖—標記馬的控制點,再開個陣列來儲存每個點的路徑數(要根據馬的控制點初始化一下), 最後兩個for迴圈,一步步遞推模擬。
**如下,純c無新增
#include
#include
int f[20][20];
int g[20][20];
int main()
else //在邊界上還可以從**到該點?
} //是不是不能了,因為可以來的路被馬「截斷」了
for(i = 1; i <= m; i++)
else
} //一步步遞推
for(i = 1; i <= n; i++)
}printf("%d\n", f[n][m]); //輸出所有的路線和
return
0;}
馬攔過河卒
問題描述 棋盤上a 點有乙個過河卒,需要走到目標 b點。卒行走的規則 可以向下 或者向右。同時在棋盤上 c點有乙個對方的馬,該馬所在的點和所有跳躍一步可達的點稱為對方馬的控制點。因此稱之為 馬攔過河卒 棋盤用座標表示,a 點 0,0 b 點 n,m n,m為不超過 15的整數 同樣馬的位置座標是需要...
馬攔過河卒
如圖,a點有乙個過河卒,需要走到目標 b點。卒行走規則 可以向下 或者向右。同時在棋盤上的任一點有乙個對方的馬 如上圖的c點 該馬所在的點和所有跳躍一步可達的點稱為對方馬的控制點。例如上圖 c點上的馬可以控制 9個點 圖中的p1,p2 p8和 c 卒不能通過對方馬的控制點。棋盤用座標表示,a點 0,...
馬攔過河卒
problem description 棋盤上a點有乙個過河卒,需要走到目標b點。卒行走的規則 可以向下 或者向右。同時在棋盤上c點有乙個對方的馬,該馬所在的點和所有跳躍一步可達的點稱為對方馬的控制點。因此稱之為 馬攔過河卒 棋盤用座標表示,a點 0,0 b點 n,m n,m為不超過15的整數 同樣...