问题一:
给定一个地图,问从某个点,能不能到达另一个点
为了便于演示,我们以(0,0) 为初始点
#include<bits/stdc++.h>
using namespace std;
string maze[110];
int val[110][110]={0};
int fx[4][2]={
{0,1},{-1,0},{0,-1},{1,0}}; // 右,上,左,下 逆时针 x为y坐标,y为x坐标。(因为x代表行,y代表列)
bool panduan(int x,int y,int n,int m) //判断边界
{
return 0<=x&&x<n&&0<=y&&y<m;
}
bool dfs(int x,int y,int n,int m)
{
if(maze[x][y]=='T')
{
return true; //重点,要知道return是返回到哪里。 (dfs里一般都是返回到上一层dfs) ,下面的return一样
}
val[x][y]=1;
maze[x][y]='m'; //标记以走,可以不用这个,val数组足够了。(这里只是为了后面打印显示一条可到达的路径)
for(int i=0;i<4;i++)
{
int tx = x+fx[i][0];
int ty = y+fx[i][1];
if(panduan(tx,ty,n,m)&&maze[tx][ty]!='#'&&val[tx][ty]!=1)
{
if(dfs(tx,ty,n,m))
{
return true;
}
}
}
val[x][y]=0; //回溯,撤销标记
maze[x][y]='.'; //回溯,撤销标记
return false;
}
int main()
{
int n,m;
cin>>n>>m; //输入行列
for(int i=0;i<n;i++)
{
cin>>maze[i];
}
int x=0,y=0;
if(dfs(x,y,n,m))
{
cout<<"true"<<endl;
for(int i=0;i<n;i++)
{
cout<<maze[i];
cout<<endl;
}
}
else
{
cout<<"false";
}
return 0;
}
结果: