#include <cstdio>
#include <iostream>
#include<algorithm>
#include<string>
#include<queue>
#include<cstring>
#include <cstdio>
#define N 110
#define M 110
#define BUF 1024
using namespace std;
char a[N][M];
int sum[N][M];
bool st[10][10];
int ans;
int n,m;
int flag;
typedef pair<int,int> pii;
int sx,sy;
int gx,gy;
int dx[4]={0,1,0,-1};
int dy[4]={-1,0,1,0};
queue<pii> q;
void dfs(int x,int y,int num){
if(num<=12&&num>2&&x==1&&y==1){
ans++;
}
else if(num>12)return;
for(int i=0;i<4;i++){
int nx = x+dx[i];
int ny = y+dy[i];
if(nx>=1&&ny>=1&&nx<=7&&ny<=7&&!st[nx][ny]){
st[nx][ny]=1;
dfs(nx,ny,num+1);
st[nx][ny]=0;
}
}
return;
}
int main()
{ ios::sync_with_stdio(false);
dfs(1,1,0);
cout<<ans;
return 0;
}
DFS可以找到一条出迷宫的路,但是不一定是最短的,在走迷宫问题上,DFS可以判断该迷宫是否有解以及找出其中一个解,也可以判断一个迷宫有多少连通区域。
dfs:可以把所有通路都走一遍,计算出通路的方案数
bfs: 可以直接一步走到终点,只能记录最短的一条路
总结:dfs复杂度大于bfs,看是要找到最短一条路,还是所有的连通路