为什么30分???

P1605 迷宫

~~您这样例都没过啊~~ 我帮您看看
by 蒟蒻珂学家 @ 2022-04-06 21:30:33


主函数的第一个for循环两层循环变量都是i ~~不过第二层改成j还是三十分~~
by 蒟蒻珂学家 @ 2022-04-06 21:36:13


等一下,洛谷炸了
by 蒟蒻珂学家 @ 2022-04-06 21:42:31


找到了。 您代码的问题是: - 有一个双层循环用了两个i作为循环变量 - flag数组默认值为0, 标记值为1; - a数组默认值为1,标记值为零;这两个数组您搞反了。 下面是ac代码,错误已经用注释标出。不过建议不要直接复制我的答案,要自己再写一遍。 看我写的这么认真,可以关注一下[我的大号](https://www.luogu.com.cn/user/671260)吗? uid = 671260 ```cpp #include<bits/stdc++.h> using namespace std; int a[7][7],ans=0,n,m,t,sx,sy,fx,fy,x,y; int dx[4]={0,0,1,-1}; int dy[4]={1,-1,0,0}; bool flag[7][7]; void search(int x1,int y1) { if(x1==fx && y1==fy) ans++; else if(a[x1][y1] == 0 || flag[x1][y1]==1) return; //这里flag是1而不是0 else { for (int i = 0; i <= 3; i++) { if(flag[x1+dx[i]][y1+dy[i]] == 0 && a[x1+dx[i]][y1+dy[i]]==1)//这里a是1而不是0 { flag[x1][y1]=1; search(x1+dx[i],y1+dy[i]); flag[x1][y1]=0; } } } } int main() { scanf("%d%d%d",&n,&m,&t); scanf("%d%d%d%d",&sx,&sy,&fx,&fy); memset(a,0,sizeof(a)); memset(flag,0,sizeof(flag)); for (int i=1;i<=n;i++) { for (int j = 1;j <= m; j++)//这里的循环变量i改成j { a[i][j]=1;//这里的a[n][m]改成a[i][j] } } for (int i=1;i <= t;i++) { scanf("%d%d",&x,&y); a[x][y]=0; } if(a[fx][fy]==0) { printf("0"); return 0; } search(sx,sy); printf("%d",ans); return 0; } ```
by 蒟蒻珂学家 @ 2022-04-06 21:55:21


@[蒟蒻珂学家](/user/427617) 好的好的
by zhangenrui666 @ 2023-04-25 20:10:05


@[蒟蒻珂学家](/user/427617) 谢谢,今天才看到
by zhangenrui666 @ 2023-04-25 20:10:40


|