一看到这题稍稍有点懵,但是仔细想想发现是大水题~~
f[i][j]表示的是从起点到(i,j)的路径数。
比较有意思的一点是,我在计算马的控制点的时候忘记控制边界了,居然AC了???

这里的正确写法应该是
int x[8]={-2,-2,-1,-1,1,1,2,2};
int y[8]={-1,1,-2,2,-2,2,1,-1};
/*
......
*/
for(i=0;i<8;i++) {
if((y[i]+hy)>=0&&(y[i]+hy)<=20&&(x[i]+hx)>=0&&(x[i]+hx)<=20) {
control[y[i]+hy][x[i]+hx]=1;
}
}
下面是我的代码:
#include<cstdio>
#include<cstring>
bool control[21][21];
int bx,by,hx,hy,f[21][21];
int main()
{
memset(f,0,sizeof(f));
f[0][0]=1;
scanf("%d%d%d%d",&bx,&by,&hx,&hy);
control[hx][hy]=1;
control[hx-2][hy-1]=1;control[hx-2][hy+1]=1;control[hx-1][hy+2]=1;control[hx-1][hy-2]=1;
control[hx+2][hy-1]=1;control[hx+2][hy+1]=1;control[hx+1][hy+2]=1;control[hx+1][hy-2]=1;
for(int i=0;i<=bx;i++)
for(int j=0;j<=by;j++)
{
if(i>0&&!control[i][j]) f[i][j]+=f[i-1][j];
if(j>0&&!control[i][j]) f[i][j]+=f[i][j-1];
}
printf("%d\n",f[bx][by]);
return 0;
}

Comments | NOTHING