迷宫救援dfs解法
在一个有n行m列的单元格组成的迷宫中,0代表空地,1代表障碍物,有一名迷路者小红,还有一名救援者小明
输入n1,n2代表小明的出发位置;输入m1,m2代表小红的被困位置,
请输出小明找到小红所需的最短路途(规定一个单元格代表一个长度单位)
样例输入:
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
样例输出:
7
在一个有n行m列的单元格组成的迷宫中,0代表空地,1代表障碍物,有一名迷路者小红,还有一名救援者小明
输入n1,n2代表小明的出发位置;输入m1,m2代表小红的被困位置,
请输出小明找到小红所需的最短路途(规定一个单元格代表一个长度单位)
样例输入:
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
样例输出:
7
#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
int n,m,m1,m2,min1=999999;
int a[51][51];
int book[51][51];
int as[4][2]={
{0,1},{0,-1},{1,0},{-1,0}};
void dfs(int x,int y,int step)
{
if(x==m1&&y==m2){
if(step<min1){
min1=step;
}
return ;
}
for(int i=0;i<4;i++){
int tx=x+as[i][0];
int ty=y+as[i][1];
if(tx<1||tx>n||ty<1||ty>m)
continue ;
if(a[tx][ty]==0&&book[tx][ty]==0)
{
book[tx][ty]=1;
dfs(tx,ty,step+1);
book[tx][ty]=0;
}
}
return ;
}
i