还是有问题
#include<bits/stdc++.h>
int main()
{
int n,m,x,y,i,j;
while(scanf("%d %d %d %d",&n,&m,&x,&y)!=EOF)
{
int a[27][27]={0};
a[y][x]=-1;
a[y-2][x-1]=-1;
a[y-1][x-2]=-1;
a[y+2][x-1]=-1;
a[y+1][x-2]=-1;
a[y-2][x+1]=-1;
a[y+2][x+1]=-1;
a[y+1][x+2]=-1;
a[y-1][x+2]=-1;
// 该马所在的点和所有移动一步可以到达的点称为对方马的控制点。过河卒不能通过对方马的控制点。
for(i=0;i<=m;i++)
{
if(a[i][0]==-1)
{
break;
}
a[i][0]=1;
}
for(i=0;i<=n;i++)
{
if(a[0][i]==-1)
{
break;
}
a[0][i]=1;
}
for(i=1;i<=m;i++)
{
for(j=1;j<=n;j++)
{
if(a[i][j]>=0)
{
if(a[i][j-1]>=0&&a[i-1][j]>=0)
a[i][j]=a[i][j-1]+a[i-1][j];
else if(a[i][j-1]<0&&a[i-1][j]>=0)
a[i][j]=a[i-1][j];
else if(a[i][j-1]>=0&&a[i-1][j]<0)
a[i][j]=a[i][j-1];
else
a[i][j]=0;}
}
}
if(a[m][n]>=0)
{
printf("%d\n",a[m][n]);}
else
printf("0\n");
}
return 0;
}
按理说应该是;零路径。。。
。。。。我反了是对的
。。。
为什么会错了,范围。。。。
以下ac代码;
#include<bits/stdc++.h>
int main()
{
int n,m,x,y,i,j;
while(scanf("%d %d %d %d",&n,&m,&x,&y)!=EOF)
{
long long a[27][27]={0};
a[y][x]=-1;
if(y-2>=0&&x-1>=0)
a[y-2][x-1]=-1;
if(y-1>=0&&x-2>=0)
a[y-1][x-2]=-1;
if(y+2>=0&&x-1>=0)
a[y+2][x-1]=-1;
if(y+1>=0&&x-2>=0)
a[y+1][x-2]=-1;
if(y-2>=0&&x+1>=0)
a[y-2][x+1]=-1;
if(y+2>=0&&x+1>=0)
a[y+2][x+1]=-1;
if(y+1>=0&&x+2>=0)
a[y+1][x+2]=-1;
if(y-1>=0&&x+2>=0)
a[y-1][x+2]=-1;
// 该马所在的点和所有移动一步可以到达的点称为对方马的控制点。过河卒不能通过对方马的控制点。
for(i=0;i<=m;i++)
{
if(a[i][0]==-1)
{
break;
}
a[i][0]=1;
}
for(i=0;i<=n;i++)
{
if(a[0][i]==-1)
{
break;
}
a[0][i]=1;
}
for(i=1;i<=m;i++)
{
for(j=1;j<=n;j++)
{
if(a[i][j]>=0)
{
if(a[i][j-1]>=0&&a[i-1][j]>=0)
a[i][j]=a[i][j-1]+a[i-1][j];
else if(a[i][j-1]<0&&a[i-1][j]>=0)
a[i][j]=a[i-1][j];
else if(a[i][j-1]>=0&&a[i-1][j]<0)
a[i][j]=a[i][j-1];
else
a[i][j]=0;}
}
}
if(a[m][n]>=0)
{
printf("%lld\n",a[m][n]);}
else
printf("0\n");
}
return 0;
}
okkk!