1219 騎士遊歷 解答

2021-07-10 22:45:13 字數 1330 閱讀 5757

1219 騎士遊歷

題目描述 description

設有乙個n*m的棋盤(2≤n≤50,2≤m≤50),如下圖,在棋盤上有乙個中國象棋馬。

規定:1)馬只能走日字

2)馬只能向右跳

問給定起點x1,y1和終點x2,y2,求出馬從x1,y1出發到x2,y2的合法路徑條數。

輸入描述 input description

第一行2個整數n和m

第二行4個整數x1,y1,x2,y2

輸出描述 output description

輸出方案數

樣例輸入 sample input

30 30

1 15 3 15

樣例輸出 sample output

#include#include#includelong long a[100][100];

int main()

} printf("%lld",a[ex][ey]);//打表,動態規劃

return 0;

}

第二種解法:

#includeint main()

;int n,m,x,y,a,b;

scanf("%d %d %d %d %d %d",&n,&m,&x,&y,&a,&b);

dp[x][y]=1;

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

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

dp[i][j]=dp[i-2][j-1]+dp[i-2][j+1]+dp[i-1][j-2]+dp[i-1][j+2];

printf("%lld",dp[a][b]);

}

你可能會問,為什麼不判斷其是否越界,,因為即使其越界了,,因為是二維陣列,所以其越界了值也會為0,,這就是為什麼其i=x+1而不是從0開始的原因了,而且這也提高了效率!

第三種:  目前沒看懂

#includeint n,m,a,b,c,d,vis[55][55],way[4][2]=,,,}; 

long long f[55][55],need[55][55];

void go(int x,int y)

for(int i=0;i<4;i++)

if(x+way[i][0]<=n&&x+way[i][0]>0&&y+way[i][1]<=m&&y+way[i][1]>0&&!vis[x+way[i][0]][y+way[i][1]])

need[x][y]=f[c][d]-now;

}int main()

wikioi 1219 騎士遊歷

設有乙個n m的棋盤 2 n 50,2 m 50 如下圖,在棋盤上有乙個中國象棋馬。規定 1 馬只能走日字 2 馬只能向右跳 問給定起點x1,y1和終點x2,y2,求出馬從x1,y1出發到x2,y2的合法路徑條數。第一行2個整數n和m 第二行4個整數x1,y1,x2,y2 輸出方案數 30 30 1...

ACM 1219 騎士遊歷 dp

22人推薦 收藏發題解 設有乙個n m的棋盤 2 n 50,2 m 50 如下圖,在棋盤上有乙個中國象棋馬。規定 1 馬只能走日字 2 馬只能向右跳 問給定起點x1,y1和終點x2,y2,求出馬從x1,y1出發到x2,y2的合法路徑條數。第一行2個整數n和m 第二行4個整數x1,y1,x2,y2 輸...

codevs天梯 騎士遊歷

題目 設有乙個n m的棋盤 2 n 50,2 m 50 如下圖,在棋盤上有乙個中國象棋馬。規定 1 馬只能走日字 2 馬只能向右跳 問給定起點x1,y1和終點x2,y2,求出馬從x1,y1出發到x2,y2的合法路徑條數。分析 當初一開始是用dfs做的,現在一開始也想用dfs做。發現題目劃區是dp,就...