~~您这样例都没过啊~~
我帮您看看
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