为什么当 $(kx,ky)$ 可以走的时候被标记的是 $b_{p,q}$
by ImposterAnYu @ 2022-10-10 19:55:26
@[owo_ImposterAnYu_owo](/user/510555)
改后还是0分(悲)
by wway @ 2022-10-10 20:00:48
@[wway](/user/602960) 注意边界,$kx,ky$ 还要小于等于 $n,m$。
by ccchl42 @ 2022-10-10 20:03:13
@[wway](/user/602960) 你的 $a$ 数组下标从 $0\sim 9$,初始化的时候不能 $i<=10$,越界了。
by ccchl42 @ 2022-10-10 20:04:24
@[chlchl](/user/765281) 问题是当 $kx > n$ 或 $ky > m$ 的时候,$a_{kx,ky} = 1$,一样不会进行遍历啊
by ImposterAnYu @ 2022-10-10 20:06:27
@[owo_ImposterAnYu_owo](/user/510555) 初始化的时候越界了,下标没有 $10$,其实这应该是 RE。
by ccchl42 @ 2022-10-10 20:08:14
@[chlchl](/user/765281) 似乎不是 RE 的问题
by ImposterAnYu @ 2022-10-10 20:09:11
@[wway](/user/602960) 帮您改了一下,现在能过了
```c++
#include<bits/stdc++.h>
int a[50][50];
int n,m,t,ans=0,ax,ay,bx,by,cx,cy;
bool b[50][50];//走
int dx[4]={0,0,-1,1};
int dy[4]={-1,1,0,0};
void dfs(int p,int q)
{
if(p==bx && q==by)
{
ans++;
return;
}
else
{
b[p][q]=1;
for(int i=0;i<=3;i++)
{
int kx=p+dx[i];
int ky=q+dy[i];
if(kx>=1 && ky>=1 && kx<=n && ky<=m && a[kx][ky]==0 && b[kx][ky]==0)
{
dfs(kx,ky);
}
}
}
b[p][q]=0;
}
int main()
{
std::cin>>n>>m>>t;
std::cin>>ax>>ay>>bx>>by;
for(int i=1;i<=t;i++)
{
std::cin>>cx>>cy;
a[cx][cy]=1;
}
dfs(ax,ay);
std::cout<<ans;
return 0;
}
```
by ImposterAnYu @ 2022-10-10 20:09:55
@[owo_ImposterAnYu_owo](/user/510555)
谢谢大佬,我调出来了
```
#include<bits/stdc++.h>
int a[10][10];
int n,m,t,ans=0,ax,ay,bx,by,cx,cy;
bool b[15][15];//走
int dx[4]={0,0,-1,1};
int dy[4]={-1,1,0,0};
void dfs(int p,int q)
{
if(p==bx && q==by)
{
ans++;
return;
}
else
{
for(int i=0;i<=3;i++)
{
int kx=p+dx[i];
int ky=q+dy[i];
if(kx>=1 && ky>=1 && kx<=n && ky<=m && a[kx][ky]==0 && b[kx][ky]==0)
{
b[kx][ky]=1;
dfs(kx,ky);
b[kx][ky]=0;
}
}
}
}
int main()
{
std::cin>>n>>m>>t;
std::cin>>ax>>ay>>bx>>by;
for(int i=1;i<=t;i++)
{
std::cin>>cx>>cy;
a[cx][cy]=1;
}
a[ax][ay]=1;
dfs(ax,ay);
std::cout<<ans;
return 0;
}
```
by wway @ 2022-10-10 20:18:47