我的代码:
```
#include<bits/stdc++.h>
using namespace std;
long long n,m,ans,t,sx,sy,fx,fy;
long long dx[5]={0,1,0,-1,0},dy[5]={0,0,-1,0,1};
bool a[11][11],c[11][11];
void dfs(long long xx,long long yy)
{
if(xx==fx&&yy==fy) {ans++;return;}
for(long long i=1;i<=4;i++)
{
xx+=dx[i];yy+=dy[i];
if(xx>0&&yy>0&&xx<=n&&yy<=m&&!a[xx][yy]&&!c[xx][yy])
{
a[xx-dx[i]][yy-dy[i]]=1;
dfs(xx,yy);
a[xx-dx[i]][yy-dy[i]]=0;
}
xx-=dx[i];yy-=dy[i];
}
}
int main()
{
cin>>n>>m>>t>>sx>>sy>>fx>>fy;
for(long long i=1;i<=t;i++)
{
long long x,y;
cin>>x>>y;
c[x][y]=1;
}
dfs(sx,sy);
cout<<ans;
return 0;
}
```
我是在循环里判越界就不进入下一层
by mzyc_yang2021 @ 2022-10-20 20:09:37
```cpp
int ny = y = dy[i];
```
???
by hecc @ 2022-10-20 20:11:08
```cpp
scanf("%d%d%d", &sx, &sy, &fx, &fy);
```
???
by hecc @ 2022-10-20 20:13:19
```cpp
#include<cstdio>
#include<iostream>
#include<algorithm>
using namespace std;
int dx[5] = {0, 0, 0, 1, -1}, dy[5] = {0, 1, -1, 0, 0};
int n, m, t, sx, sy, fx, fy, ans;
bool wa[10][10], vis[10][10];
void dfs(int x, int y)
{
if(x < 1 || x > n || y < 1 || y > m)
return;
if(wa[x][y] || vis[x][y])
return;
if(x == fx && y == fy)
{
ans++;
return;
}
vis[x][y] = true;
for(int i = 1; i <= 4; i++)
{
int nx = x + dx[i];
int ny = y + dy[i];
dfs(nx, ny);
}
vis[x][y] = false;
}
int main()
{
scanf("%d%d%d", &n, &m, &t);
scanf("%d%d%d%d", &sx, &sy, &fx, &fy);
for(int i = 1; i <= t; i++)
{
int tmp1, tmp2;
scanf("%d%d", &tmp1, &tmp2);
wa[tmp1][tmp2] = true;
}
dfs(sx, sy);
printf("%d", ans);
return 0;
}
```
AC
by hecc @ 2022-10-20 20:14:08