SDUT 1265 馬攔過河卒

2021-08-18 01:41:38 字數 1664 閱讀 7154

馬攔過河卒

time limit: 3000 ms memory limit: 65536 kib

problem description

棋盤上a點有乙個過河卒,需要走到目標b點。卒行走的規則:可以向下、或者向右。同時在棋盤上c點有乙個對方的馬,該馬所在的點和所有跳躍一步可達的點稱為對方馬的控制點。因此稱之為「馬攔過河卒」。棋盤用座標表示,a點(0,0)、b點(n,m)(n,m為不超過15的整數),同樣馬的位置座標是需要給出的。現在要求你計算出卒從a點能夠到達b點的路徑的條數,假設馬的位置是固定不動的,並不是卒走一步馬走一步。

input

一行四個資料,用空格分隔,分別表示b點的座標和馬的座標。

output

乙個資料,表示所有的路徑條數。

sample input

6 6 3 3

sample output

hint

#include

#include

using

namespace

std;

int main()

{ long

long arr[20][20];

int ctr[20][20],n,i,m,j,x,y;

cin >> n >> m >> x >> y;

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

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

ctr[i][j]=1;

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

for(j=1;j<=n;j++)

arr[i][j]=0;

ctr[x][y] = 0;

ctr[x-1][y-2] = 0;

ctr[x+1][y-2] = 0;

ctr[x-2][y-1] = 0;

ctr[x+2][y-1] = 0;

ctr[x-2][y+1] = 0;

ctr[x+2][y+1] = 0;

ctr[x-1][y+2] = 0;

ctr[x+1][y+2] = 0;

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

if(ctr[i][0]!=0)

arr[i][0]=1;

else

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

arr[i][0]=0;

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

if(ctr[0][i]!=0)

arr[0][i]=1;

else

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

arr[0][i]=0;

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

for(j=1;j<=m;j++)

if(ctr[i][j]==1)

arr[i][j]=arr[i-1][j]+arr[i][j-1];

cout

<< arr[n][m] 《這題你應該很容易解出來,可是為什麼總是解不出來呢?

你還混亂座標的概念,橫豎和陣列沒有直接的關係,(a,b),你陣列非用[b][a]來表示出來,因為在你腦海中一直將陣列第一位對應行數,這其實完全沒有必要,你可以用[a][b]來表示相關數值。

還有控制點的判斷,其實不用判斷是否在盤內,如果不符合應該不會實現賦值的,直接大膽的賦值就好。

SDUT 1265 馬停下過河卒 DFS

time limit 3000ms memory limit 65536k 有疑問?點這裡 棋盤上a點有乙個過河卒,須要走到目標b點。卒行走的規則 可以向下 或者向右。同一時候在棋盤上c點有乙個對方的馬,該馬所在的點和全部跳躍一步可達的點稱為對方馬的控制點。因此稱之為 馬攔過河卒 棋盤用座標表示,a...

SDUT 馬攔過河卒

time limit 3000ms memory limit 65536k 棋盤上a點有乙個過河卒,需要走到目標b點。卒行走的規則 可以向下 或者向右。同時在棋盤上c點有乙個對方的馬,該馬所在的點和所有跳躍一步可達的點稱為對方馬的控制點。因此稱之為 馬攔過河卒 棋盤用座標表示,a點 0,0 b點 n...

1265 馬攔過河卒 dfs

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