这是一道很简单的迷宫搜索题,适合搜索初学者练习.
思路
用mp数组表示迷宫地图
用vis数组表示“打标记”
dir为偏移数组,不用多讲
之后就是开搜索直接找方案数
代码:
#include<bits/stdc++.h>//万能头文件
#define maxn 1001+10
using namespace std;
int n,m,cnt,t;
int mp[maxn][maxn],vis[maxn][maxn];
int sx,sy,ex,ey,fx,fy;
int dir[5]={-1,0,1,0,-1};//定义
void dfs(int x,int y)
{
if(x==ex && y==ey){
cnt++;
}//方案数++
for(int i=0;i<4;i++)
{
int nx=x+dir[i];
int ny=y+dir[i+1];
if(nx>=1 && nx<=n && ny>=1 && ny<=m && mp[nx][ny]==0 && vis[nx][ny]==0){//判断边界
vis[nx][ny]=1;
dfs(nx,ny);
vis[nx][ny]=0;
}
}
}//dfs深搜
int main()
{
cin >> n >> m >> t;
cin >> sx >> sy >> ex >> ey ;//输入
for(int i=1;i<=t;i++){
cin >> fx >> fy;
mp[fx][fy]=1;
}
vis[sx][sy]=1;//起点一定记得打标记
dfs(sx,sy);//递归查找
cout << cnt;//输出
return 0;
}