```cpp
#include<bits/stdc++.h>
using namespace std;
int n,m,t,one,two;
int sx,sy,fx,fy;
int a[6][6];
int ans=0;
int dx[5]={0,0,1,0,-1};//右下左上
int dy[5]={0,1,0,-1,0};
bool vis[6][6];
void dfs(int x,int y){
if(x==fx&y==fy){//特判,如果起点==终点,结果只为1
ans++;
return;//结束
}
int tx,ty;//当前坐标
for(int i=1;i<=4;i++){
tx=x+dx[i];//让行和列分别加上方向
ty=y+dy[i];
if(tx>=1&&tx<=n&&ty>=1&&ty<=m&&vis[tx][ty]==0){ //判断是否越界,已经下一步是否走过
vis[tx][ty]=1;//走完后标记成1 ,不然会死循环
dfs(tx,ty);//将走完后的下标再传过去
vis[tx][ty]=0;//回溯,因为求的是方案总数
}
}
}
int main () {
cin>>n>>m>>t;//输入
cin>>sx>>sy>>fx>>fy;//起点,终点坐标
for(int i=1;i<=t;i++){
cin>>one>>two;//输入障碍物的坐标
vis[one][two]=1;//障碍物走不了,标记成1
}
vis[sx][sy]=1;//起点和终点也都标记成1
dfs(sx,sy);//将起点坐标传值
cout<<ans;
}
```
by Lv_666 @ 2023-08-20 10:36:33