把 b[x][y]=0; 写在 search 的 for 循环的外面
by luoyukai @ 2024-01-26 17:29:37
@[luoyukai](/user/1200412) 我之前是那么写的,但是有6个测试点一直不过
by JXnd2021 @ 2024-01-26 17:41:06
等一下,我找一下之前的代码
by luoyukai @ 2024-01-26 17:43:12
满分代码
```cpp
#include<bits/stdc++.h>
long long n,m,i,j,k,t,qx,qy,zx,zy,ax,ay,ans;
long long a[10][10];
long long fx[4][2]={0,1,1,0,0,-1,-1,0};
void search(long long x,long long y)
{
if(x==zx&&y==zy)
{
ans++;
return;
}
for(int i=0;i<4;i++)
{
long long xx=x+fx[i][0];
long long yy=y+fx[i][1];
if(a[xx][yy]==0)
{
a[xx][yy]=1;
search(xx,yy);
a[xx][yy]=0;
}
}
}
int main(){
std::cin>>n>>m>>t>>qx>>qy>>zx>>zy;
for(i=1;i<=t;i++)
{
std::cin>>ax>>ay;
a[ax][ay]=1;
}
for(i=0;i<=m+1;i++)
{
a[0][i]=a[n+1][i]=1;
}
for(i=0;i<=n+1;i++)
{
a[i][0]=a[i][m+1]=1;
}
a[qx][qy]=1;
search(qx,qy);
std::cout<<ans;
return 0;
}
``````
by luoyukai @ 2024-01-26 17:46:21
tx>=1&&ty>=1&&tx<=n&&ty<=m 这4个条件多了一个等于号
by luoyukai @ 2024-01-26 17:49:00
等于号是应该要有的,不然边界就不对了
by JXnd2021 @ 2024-01-26 17:55:26
AC
```c
#include<iostream>
using namespace std;
int n, m, t, sx, sy, fx, fy;
int vis[10][10]; //标记
int mp[10][10]; //障碍物位置
int ans = 0;
int xx[] = { 1,0,-1,0 };
int yy[] = { 0,-1,0,1 };
void dfs(int x, int y)
{
if (x == fx && y == fy)
{
ans++;
return;
}
for (int i = 0; i < 4; i++)
{
int dx = xx[i] + x;
int dy = yy[i] + y;
if (dx >= 1 && dx <= n && dy >= 1 && dy <= m && vis[dx][dy]==0 && mp[dx][dy]==0)
{
vis[dx][dy] = 1;
dfs(dx, dy);
vis[dx][dy] = 0;
}
}
}
int main()
{
cin >> n >> m >> t >> sx >> sy >> fx >> fy;
while (t--)
{
int a, b;
cin >> a >> b;
mp[a][b] = 1;
}
vis[sx][sy] = 1;
dfs(sx, sy);
cout << ans << endl;
return 0;
}
```
by timmyliao @ 2024-01-26 17:55:28
感谢各位大佬,AC了,我加了一个b[sx][sy]=1;就对了
by JXnd2021 @ 2024-01-26 18:01:20