骑士游历

来源:互联网 发布:淘宝自定义内容全屏 编辑:程序博客网 时间:2024/03/29 16:17

设有一个n*m的棋盘(2≤n≤50,2≤m≤50),在棋盘上有一个中国象棋马。
规定:
1)马只能走日字
2)马只能向右跳
问给定起点x1,y1和终点x2,y2,求出马从x1,y1出发到x2,y2的合法路径条数。

思路和过河卒一个样,注意处理边界。

#include<iostream>#include<cstdio>using namespace std;long long dp[101][101];int f(int x){    return max(0,x);}int main(){    int n,m,x1,y1,x2,y2;    cin>>n>>m>>x1>>y1>>x2>>y2;    dp[x1][y1] = 1;    for(int i = x1 + 1 ; i <= x2 ; i ++)        for(int j = 1 ; j <= m ; j ++)            dp[i][j] = max(dp[i][j],dp[f(i-1)][f(j-2)]+dp[f(i-2)][f(j-1)]+dp[f(i-1)][f(j+2)]+dp[f(i-2)][f(j+1)]);    cout<<dp[x2][y2];    return 0;}
0 0