解救小明:有一天小明一个人去玩迷宫,但是方向感不好的小明迷路了,小红得知后要去解救小明,小红知道了迷宫的地图,小红要以最快的速度解救小哈
迷宫由m行n列组成,都小于50,每个单元格要不是空地,要不是障碍物,你的任务是帮助小红找到一条通往小明的最短路径,注意障碍物是不能走的。
小明的位置为(p,q),迷宫入口为(1,1),输入数据如下:
5 4
0 0 1 0
0 0 0 0
0 0 1 0
0 1 0 0
0 0 0 1
1 1 4 3
#include<iostream>
#include<cstdio>
using namespace std;
int n,m,s[51][51],q,e,book[51][51],min1=0x7fffffff;
void dfs(int x,int y,int step)
{
int a[4][2]={{0,1},{1,0},{-1,0},{0,-1}};//表示上下左右
int tx,ty;
if(x==q&&y==e)//满足条件就进行比较
{
if(step<min1)//寻求最小值
{
min1=step;
}
return;
}
for(int u=0;u<4;u++)
{
tx=x+a[u][0];
ty=y+a[u][1];
if(tx>0&&tx<=m&&ty>0&&ty<=n)//注意这个条件
if(s[tx][ty]==0&&book[tx][ty]==0)
{
book[tx][ty]=1;
dfs(tx,ty,step+1);
book[tx][ty]=0;
}
}
return;
}
int main(){
/* freopen("in.txt","r",stdin);//可以忽略
freopen("out.txt","w",stdout);*/
int start1,start2;
scanf("%d%d",&n,&m);
for(int i=1;i<=n;i++)//输入矩阵
{
for(int j=1;j<=m;j++)
{
scanf("%d",&s[i][j]);
}
}
scanf("%d%d%d%d",&start1,&start2,&q,&e);
dfs(start1,start2,0);//调用自定义函数DFS 深搜 解决
printf("%d",min1);//这就不要说了
return 0;
}
利用BFS:https://blog.csdn.net/qq_42866708/article/details/81534345