#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <algorithm>
#include <iostream>
#include <cmath>
#include <vector>
#include <map>
#include <stack>
#include <queue>
using namespace std;
typedef long long ll;
const int MAX=0x3f3f3f3f;
const int N=10;
int a[N][N];
int vis[N][N];
int n,m,t,ans;
int dx[4]={0, -1, 0, 1};
int dy[4]={-1, 0, 1, 0};
int sx,sy,ex,ey;
void dfs(int x,int y){
if(x==ex&&y==ey){
ans++;
return;
}
for(int i=0;i<4;i++){
int nx=x+dx[i];
int ny=y+dy[i];
if(nx>=1&&nx<=n&&ny>=1&&ny<=m&&!vis[nx][ny]&&!a[nx][ny]){
vis[nx][ny]=1;
dfs(nx,ny);
vis[nx][ny]=0;
}
}
}
int main(){
cin>>n>>m>>t;
cin>>sx>>sy>>ex>>ey;
for(int i=0;i<t;i++){
int c,b;
cin>>b>>c;
a[b][c]=1;
}
vis[sx][sy]=1; //因为dfs函数里并没有将起点设为已访问
//所以在后面的访问里,可能访问起点许多次(如果可以返回到起点)
//所以你的答案可能比标准答案多
dfs(sx,sy);
cout<<ans<<endl;
}
迷宫
最新推荐文章于 2020-07-12 10:17:08 发布