题目分析
这题是一个经典的深度优先搜索问题。进入迷宫后,看四个方向是否有路可走,如果有路可走,则沿该方向再向前试探;如果已无路可走,则返回一步,再看其它方向是否还有路可走;如果有路可走,则沿该方向再向前试探。按此原则不断搜索回溯再搜索,直到找到新的出路或从原路返回入口处无解为止。
AC代码
#include<bits/stdc++.h>
using namespace std;
int n,m,t,qx,qy,zx,zy,ans;
int dx[]={-1,1,0,0},dy[]={0,0,-1,1};
bool mi[1005][1005],bj[1005][1005];
void dfs(int x,int y){
//判断是否到达终点
if(x==zx&&y==zy){
ans++;
return;
}else{
//枚举四个方向
for(int i=0;i<4;i++){
int xx=x+dx[i];
int yy=y+dy[i];
//判断是否能走
if(mi[xx][yy]==0&&bj[xx][yy]==0&&1<=xx&&1<=yy&&xx<=n&&yy<=m){
bj[xx][yy]=1;//把走过的标记为1
dfs(xx,yy);