深搜模板
#include<bits/stdc++.h>
using namespace std;
int p[][2] = {{-1,0}, {1,0}, {0,-1}, {0, 1}};
int n,m,t;
int a[55][55];
int sx,sy,fx,fy;
int cnt;
void dfs(int x, int y){
if(x==fx && y==fy){ //如果是终点,表示找到一种方案,cnt++。结束这一条路
cnt++;
return;
}
a[x][y] = -1; //已经走了,标记为不可走
for(int i=0; i<4; i++){ //4个方向都进行深入搜索,也就是在每个方向再次dfs
int tx = x+p[i][0];
int ty = y+p[i][1];
//在范围内,同时没有走过
if(tx>=1 && tx<=n && ty>=1 && ty<=m && a[tx][ty]==0){
dfs(tx, ty);
}
}
a[x][y] = 0; //退回来的时候撤掉标记,因为可能有其他路也可能走这个位置
}
int main(){
cin >> n >> m >> t; //n行m列,有t个障碍
cin >> sx >> sy >> fx >> fy;
while(t--){ //循环t次,设置障碍的位置是-1
int x,y;
cin >> x >> y;
a[x][y] = -1;
}
dfs(sx, sy); //从起点出发搜索,
cout << cnt; //搜索结束后输出方案数
return 0;
}