方法1
#include <iostream>
#include <string.h>
using namespace std;
typedef long long ll ;
ll f[16][16]={0};
bool dp[16][16];
ll F(ll i,ll j)
{
if(dp[i][j]==0)
return 0;
if((i==0&&j==1)||(i==1&&j==0)||(i==0&&j==0))
return 1;
if(f[i][j])
return f[i][j];
else{
if(i>=1&&j>=1)
return f[i][j]=F(i-1,j)+F(i,j-1);
else if(i==0&&j>1)
return f[i][j]=F(i,j-1);
else
return f[i][j]=F(i-1,j);
}
}
int main() {
memset(dp,1,sizeof(dp));
int m,n,x,y;
cin>>m>>n>>x>>y;
dp[x][y]=0;
dp[x - 1][y - 2] = 0; dp[x - 1][y + 2] = 0;
dp[x + 1][y + 2] = 0; dp[x + 1][y - 2] = 0;
dp[x - 2][y - 1] = 0; dp[x - 2][y + 1] = 0;
dp[x + 2][y - 1] = 0; dp[x + 2][y + 1] = 0;
cout<<F(m,n)<<endl;
return 0;
}
/*运行结果
6 6 0 1
56
--------------------------------*/
方法2
#include<bits/stdc++.h>
using namespace std;
long long a[25][25],b[25][25];
void horse(int x,int y)
{
a[x][y]=1;
a[x-2][y-1]=1;
a[x-2][y+1]=1;
a[x-1][y-2]=1;
a[x-1][y+2]=1;
a[x+1][y-2]=1;
a[x+1][y+2]=1;
a[x+2][y-1]=1;
a[x+2][y+1]=1;
}
int main()
{
int bx,by,mx,my;
cin>>bx>>by>>mx>>my;
horse(mx+1,my+1);//马走日,防止数组越界,下标为负数
b[1][1]=1;
for(int i=1;i<=bx+1;i++)
for(int j=1;j<=by+1;j++)
{
if((a[i][j]!=1)&&(b[i][j]==0))
{
b[i][j]=b[i-1][j]+b[i][j-1];//卒的两种走法
}
}
cout<<b[bx+1][by+1];
return 0;
}
/*运行结果
6 6 0 1
56
--------------------------------*/
此时却宕机了,我的疑惑是这两种方法不都越界了吗,第一种为什么没有宕机