$“改进”$
by shawn0618 @ 2024-03-02 21:59:15
@[ChenJiaMing110122](/user/1053119) 哪里赋值不一样,我咋没看出来,第几行啊
by __Rickysun__ @ 2024-03-02 22:05:34
@[Rickysun](/user/824205) 一次flag赋值为0,一次为1,并且我用的是memset
by ChenJiaMing110122 @ 2024-03-02 22:13:45
@[ChenJiaMing110122](/user/1053119) 我看到了,我也觉得很离谱,等我想想,我调试一下
by __Rickysun__ @ 2024-03-02 22:14:42
@[ChenJiaMing110122](/user/1053119) 其实不用 $memset$ 它也会自动赋值为 $0$ 的,真是离了个大谱了
by __Rickysun__ @ 2024-03-02 22:15:54
@[Rickysun](/user/824205) 但是还是没有输出呀
by ChenJiaMing110122 @ 2024-03-02 22:17:49
@[ChenJiaMing110122](/user/1053119) 我加了个边界判断就 $AC$ 了,但是为啥题解没加边界判断就 $AC$ 了呢
by __Rickysun__ @ 2024-03-02 22:19:15
@[ChenJiaMing110122](/user/1053119) 调试后代码如下:
```cpp
#include<bits/stdc++.h>
using namespace std;
int n,m,t;
int sx,sy,fx,fy;
int ans;
int f[10][10],flag[10][10];
int d1[4]={-1,1,0,0};
int d2[4]={0,0,-1,1};
void dfs(int x,int y){
if(x==fx&&y==fy){
ans++;
return ;
}
else{
for(int i=0;i<4;i++){
if(flag[x+d1[i]][y+d2[i]]==0&&f[x+d1[i]][y+d2[i]]==0&&x+d1[i]<=n&&x+d1[i]>=1&&y+d2[i]<=m&&y+d2[i]>=1){
f[x][y]=1;
dfs(x+d1[i],y+d2[i]);
f[x][y]=0;
}
}
}
}
int main(){
cin>>n>>m>>t;
cin>>sx>>sy>>fx>>fy;
for(int i=1;i<=t;i++){
int x,y;
cin>>x>>y;
flag[x][y]=1;
}
dfs(sx,sy);
cout<<ans<<endl;
return 0;
}
```
by __Rickysun__ @ 2024-03-02 22:19:35
@[ChenJiaMing110122](/user/1053119) 找到原因了!你定义成0就得加越界判断,但是题解不用,原因如下:
![](https://cdn.luogu.com.cn/upload/image_hosting/uxh225sb.png)
还是题解回复区的大佬给了我答案
by __Rickysun__ @ 2024-03-02 22:23:27
@[Rickysun](/user/824205) 谢谢,已经AC,此帖结
by ChenJiaMing110122 @ 2024-03-02 22:26:40