#include <iostream>
#include <cmath>
#include <cstdio>
#include <cstring>
using namespace std;
int n,m,k,sum = 0,xa,xb,ya,yb,x,y,fx[5]={0,0,0,-1,1},fy[5]={0,1,-1,0,0};
// n,m为行数和列数,k为障碍数,sum为方法数
//xa,ya,xb,yb,x,y分别为起点坐标、终点坐标、障碍点坐标
//数组fx,fy分别表示四个方向(上、下、左、右)
bool f[10][10],b[10][10]; // 数组f表示该点是否曾走过(1表示曾走过)
// 数组b表示该点是否有障碍(1表示有障碍)
int search(int,int,int); //定义搜索函数
int main(){
memset(b, 0, sizeof(b));//数组清零
memset(f, 0, sizeof(f));
cin >> n >> m >> k >> xa >> ya >> xb >> yb;
// 读入数据
for(int i = 1; i <= k; i++)
{
cin >> x >> y; // 读入障碍点坐标
b[x][y] = 1; //标记障碍点
}
search(xa,ya,sum); //调用函数
cout << sum << endl;
return 0;
}
int search(int x,int y,int sum){
//搜索
for(int i = 1; i <= 4; i++)
{
if(!f[x + fx[i]][y + fy[i]] && !b[x + fx[i]][y + fy[i]])
//满足条件
{
f[x + fx[i]][y + fy[i]] = 1;
//标记
if((x + fx[i]) == xb && (y + fy[i]) ==yb) sum++;
//到达目的
else search(x + fx[i], y + fy[i], sum);
//继续递归
f[x + fx[i]][y + fy[i]] = 0;
//回溯
}
}
}
为方便理解 本蒟蒻加上了注释