#include <bits/stdc++.h>
using namespace std;
const int N=20+5;
int a[N][N];
bool vis[N][N];
int n,m,t;
int sx,sy,fx,fy;
int cnt;
int dx[]={-1,1,0,0};
int dy[]={0,0,1,-1};
bool valid(int x,int y)
{
return x>=1&&x<=n&&y>=1&&y<=m;
}
void dfs(int x,int y)
{
if(x==fx&&y==fy)
{
cnt++;
return;
}
for(int i=0;i<4;i++)
{
if(valid(x+dx[i],y+dy[i])&&!a[x+dx[i]][y+dy[i]]&&!vis[x+dx[i]][y+dy[i]])
{
vis[x+dx[i]][y+dy[i]]= true;
dfs(x+dx[i],y+dy[i]);
vis[x+dx[i]][y+dy[i]]= false;
}
}
}
int main()
{
scanf("%d%d%d",&n,&m,&t);
scanf("%d%d%d%d",&sx,&sy,&fx,&fy);
for(int i=0;i<t;i++)
{
int x,y;
scanf("%d%d",&x,&y);
a[x][y]=1;
}
vis[sx][sy]= true;//记得初始化
dfs(sx,sy);
printf("%d",cnt);
return 0;
}
本体坑点:
初始化要在dfs的前边
dfs之后要记得复原现场
另外,计算有多少条路径不能用 b f s bfs bfs,而应该用 d f s dfs dfs