@[即将成为大牛](/user/427864)
- 是“应该”而不是“因该”
- 有返回值的函数没有`return`好像是个 UB
- 没判断马能跳到的坐标是否在给定坐标系内,可能导致数组访问越界
- 这题就不能用普通 DFS 来做,您自己算一下时间复杂度
改了一下,这是60分的代码,有两个点T了
```cpp
#include<stdio.h>
int a[100][100],counts;
void game(int,int,int,int);
void game(int x,int y,int zx,int zy)
{
if(x==zx&&y==zy)
{
counts++;
return;
}
if(x>=0&&x<zx&&a[x+1][y]!=1)
{
game(x+1,y,zx,zy);
}
if(y>=0&&y<zy&&a[x][y+1]!=1)
{
game(x,y+1,zx,zy);
}
}
int main()
{
int mx,my,zx,zy;
scanf("%d%d%d%d",&zx,&zy,&mx,&my);
if(mx>=0&&my>=0&&my<=zy&&mx<=zx) a[mx][my]=1;
if(mx-1>=0&&my-2>=0&&my-2<=zy&&mx-1<=zx) a[mx-1][my-2]=1;
if(mx-2>=0&&my-1>=0&&my-1<=zy&&mx-1<=zx) a[mx-2][my-1]=1;
if(mx-2>=0&&my+1>=0&&my+1<=zy&&mx-2<=zx) a[mx-2][my+1]=1;
if(mx-1>=0&&my+2>=0&&my+2<=zy&&mx-1<=zx) a[mx-1][my+2]=1;
if(mx+1>=0&&my-2>=0&&my-2<=zy&&mx+1<=zx) a[mx+1][my-2]=1;
if(mx+2>=0&&my-1>=0&&my-1<=zy&&mx+2<=zx) a[mx+2][my-1]=1;
if(mx+2>=0&&my+1>=0&&my+1<=zy&&mx+2<=zx) a[mx+2][my+1]=1;
if(mx+1>=0&&my+2>=0&&my+2<=zy&&mx+1<=zx) a[mx+1][my+2]=1;
game(0,0,zx,zy);
printf("%d",counts);
return 0;
}
```
by Islauso @ 2021-01-11 15:15:52
@[Segment_Tree_](/user/183235)
谢谢
by 即将成为大牛 @ 2021-01-11 16:50:47