#include<bits/stdc++.h>
using namespace std;
//a[i][j] i,j位置迷宫是否能走
//b[i][j] i,j位置的迷宫格子是否访问过
//num计数
//n行列
int a[10][10],b[10][10],num,n;
//方向数组
int dx[5]={0,-1,0,1,0};
int dy[5]={0,0,1,0,-1};
void dfs(int x,int y){
//如果找到出口
if(a[x][y]==2){
b[x][y]=0;
num++;
return ;
}
//循环遍历四个方向 深搜看能否继续进行 找到终点
for(int i=1;i<=4;i++){
int newx=x+dx[i];
int newy=y+dy[i];
if(newx>=1 && newx<=n &&newy>=1 && newy<=n){
if(a[newx][newy]!=1 &&b[newx][newy]==0){
//先标记 再访问
b[newx][newy]=1;
dfs(newx,newy);
}
}
}
b[x][y]=0;
}
int main(){
cin>>n;
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
cin>>a[i][j];
}
}
//门被堵死 直接结束 没路
if(a[1][1]==1){
cout<<0;
return 0;
}
//进行深搜(从起点开始搜索 注意 要记得标记)
b[1][1]=1;
dfs(1,1);
cout<<num;
return 0;
}
c++统计线路(深搜
最新推荐文章于 2024-04-23 14:32:20 发布