为啥赋值不一样,就没输出呢(求调)

P1605 迷宫

$“改进”$
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


|