20分,不知道因该改哪里,求大佬指点

P1002 [NOIP2002 普及组] 过河卒

@[即将成为大牛](/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


|