迷宫深搜
程序员文章站
2023-12-23 16:49:16
...
#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
char maze[20][20];
bool vis[20][20];
int res;
int n,m;
int dx[4]={1,0,-1,0};
int dy[4]={0,1,0,-1};
void dfs(int x,int y){
if(maze[x][y]=='T'){
res++;
return;
}
int xx,yy;
for(int i=0;i<4;i++){
xx=x+dx[i];
yy=y+dy[i];
if(0<=xx&&xx<n&&0<=yy&&y<m&&(vis[xx][yy]==false))
{
if(maze[xx][yy]!='#'){//注意条件,只要不是障碍就行,别=='.',到不了出口的。
vis[xx][yy]=true;//访问标记放在下次深搜前后比较好
dfs(xx,yy);
vis[xx][yy]=false;
}
}
}
}
int main(){
int sx,sy;
cin>>n>>m;
for(int i=0;i<n;i++){
for(int j=0;j<m;j++){
cin>>maze[i][j];
if(maze[i][j]=='S'){
sx=i;
sy=j;
}
}
}
memset(vis,false,sizeof(vis));//可以这样用
res=0;
vis[sx][sy]=true;
dfs(sx,sy);
cout<<res<<endl;
return 0;
}