题目链接:https://www.luogu.com.cn/problem/P1605
题解:典型的dfs题目,用a数组存迷宫,障碍处赋值为1,用book数组记录走过哪个方格(起点要记录走过或者记录为障碍,不然之后的路径会再次经过起点)。之后模拟上下左右走的方式,当走到终点ans++即可(记得return)。
#include<bits/stdc++.h>
using namespace std;
const int N=10;
int dir[4][2]{{0,1},{1,0},{0,-1},{-1,0}};
int a[N][N],book[N][N];
int fx,fy,n,m;
int ans=0;
void dfs(int x,int y){
if(x==fx&&y==fy){
ans++;
return ;
}
int tx,ty;
for(int i=0;i<4;i++){
tx=x+dir[i][0];
ty=y+dir[i][1];
if(tx<1||tx>n||ty<1||ty>m)
continue;
if(a[tx][ty]==0&&book[tx][ty]==0){
book[tx][ty]=1;
dfs(tx,ty);
book[tx][ty]=0;
}
}
return ;
}
int main(){
int t,sx,sy,x,y;
cin>>n>>m>>t>>sx>>sy>>fx>>fy;
a[sx][sy]=1;
for(int i=0;i<t;i++){
cin>>x>>y;
a[x][y]=1;
}
dfs(sx,sy);
cout<<ans<<endl;
return 0;
}