深搜走迷宫
入口 S
出口 T
墙 *
#include <iostream>
#include <string>
using namespace std;
int n,m;
bool ok;
int dx,dy;
int dir[4][2]={{-1,0},{1,0},{0,1},{0,-1}};
string maze [110];
bool vis[110][110];
bool in(int x,int y){
if (x>=0&&x<n&&y>=0&&y<m){
return true;
}
return false ;
}
void dfs (int x,int y)
{
if (ok)
{
return ;
}
if (maze[x][y]=='T'){
ok=true;
for (int i=0;i<n;i++)
{
for (int j=0;j<m;j++){
printf ("%c",maze[i][j]);
}
printf ("\n");
}
return ;
}
vis[dx][dy]=true;
maze[x][y]='m';
for (int i=0;i<4;i++){
dx=x+dir[i][0];
dy=y+dir[i][1];
if (in(dx,dy)&&!vis[dx][dy]&&maze[dx][dy]!='*'){
dfs (dx,dy);
}
}
vis[dx][dy]=false;
maze[x][y]='.';
}
int main ()
{
//输入迷宫地图
cin>>n>>m;
for (int i=0;i<n;i++){
cin>>maze[i];
}
int x,y;
for (int i=0;i<n;i++){
for (int j=0;j<m;j++)
{
if (maze[i][j]=='S'){
x=i;
y=j;
}
}
}
dfs (x,y);
return 0;
}
详解欢迎关注我的公众号:王同学的蓝桥杯训练营