馬攔過河卒

2021-07-04 04:40:26 字數 1602 閱讀 8728

如圖,a點有乙個過河卒,需要走到目標 b點。卒行走規則:可以向下、或者向右。同時在棋盤上的任一點有乙個對方的馬(如上圖的c點),該馬所在的點和所有跳躍一步可達的點稱為對方馬的控制點。例如上圖 c點上的馬可以控制 9個點(圖中的p1,p2 … p8和 c)。卒不能通過對方馬的控制點。

棋盤用座標表示,a點(0,0)、b點(n,m)(n,m為不超過 17的整數,並由鍵盤輸入),同樣馬的位置座標是需要給出的(約定:c<>a,同時c<>b).現在要求你計算出卒從 a點能夠到達 b點的路徑的條數.

input

輸入b點的座標(n,m)以及對方馬的座標(x,y)

output

螢幕輸出乙個整數(路徑的條數)。

sample input

6 6 3 2

sample output17

思路:(1)如果沒有馬,從原點走到終點(對角)有多少種走法呢?計算的方法是:除原點外走到x軸和y軸上任意一點的走發都只有一種,其他,走到其他點的走法數=上面那點的走法數+左面那點的走法數.

(2)如果不再座標軸上的某一點不能走就把走到那點的方法數標為0,如果在座標軸上就把它及其後面所有的點都標為0,然後計算走到其他點的方法數.

//判斷馬的落腳點

int xi[9]=;

int yi[9]=;

int main()

}//將馬的落腳點標為-2

for(i=0;i<9;i++)

map[0][0]=1;

//把x軸的每個元素賦值為1,如果為馬的落腳點後面的全都賦值為0

for(i=0;i<=n;i++)

else

map[i][0]=1;

}//把y軸的每個元素賦值為1,如果為馬的落腳點後面的全都賦值為0

for(i=0;i<=m;i++)

else

map[0][i]=1;

}//將馬的落腳點標為0

for(i=0;i<9;i++)

//計算從原點到終點的步數

//計算方法:

/*0 1 1 1

1 2 3 4

1 3 6 10

1 4 10 20

*/for(i=1;i<=n;i++)

}//測試**:列印矩陣

/*for(i=0;i<=n;i++)

{for(j=0;j<=m;j++)

{cout<

馬攔過河卒

問題描述 棋盤上a 點有乙個過河卒,需要走到目標 b點。卒行走的規則 可以向下 或者向右。同時在棋盤上 c點有乙個對方的馬,該馬所在的點和所有跳躍一步可達的點稱為對方馬的控制點。因此稱之為 馬攔過河卒 棋盤用座標表示,a 點 0,0 b 點 n,m n,m為不超過 15的整數 同樣馬的位置座標是需要...

馬攔過河卒

problem description 棋盤上a點有乙個過河卒,需要走到目標b點。卒行走的規則 可以向下 或者向右。同時在棋盤上c點有乙個對方的馬,該馬所在的點和所有跳躍一步可達的點稱為對方馬的控制點。因此稱之為 馬攔過河卒 棋盤用座標表示,a點 0,0 b點 n,m n,m為不超過15的整數 同樣...

馬攔過河卒

time limit 1000ms memory limit 65536kb submit statistic discuss problem description 的螺旋方陣當n 5和n 3時分別是如下的形式 請給出乙個程式,對於任意的輸入 0 11 輸出按照上面規律所獲得的 的螺旋方陣。inp...