//DFS求起点到终点最短路径,手动输入地图,5行4列,地图如下,起点(1,1)终点(4,3) 1是障碍 0是通路
//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 <stdio.h>
#include <iostream>
#include <string.h>
#include <math.h>
#include <cstdlib>
#include <algorithm>
using namespace std;
int n,m;
int a[100][100]; //地图大小
int b[100][100]; // 标记 走过路
int sx,sy,ex,ey; //起点(sx,sy)终点(ex,ey)
int minx=99999999;
int next[4][2]={{0,1},{1,0},{0,-1},{-1,0}};
void dfs(int x ,int y ,int step){
if(x==ex&&y==ey){ //求最短路径
if(minx>step){
minx=step;
}
return;
}
for(int k=0;k<4;k++){ //四个方向
int tx,ty;
tx=x+next[k][0];
ty=y+next[k][1];
if(tx<1||tx>n||ty<1||ty>m){ //判断边界
continue;
}
if(a[tx][ty]==0&&b[tx][ty]==0){ //判断障碍 是否走过
b[tx][ty]=1;
dfs(tx,ty,step+1);
b[tx][ty]=0;
}
}
return;
}
int main(){
// memset(b,0,sizeof(b));
scanf("%d%d",&n,&m);
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
scanf("%d",&a[i][j]); //地图初始化
}
}
scanf("%d%d%d%d",&sx,&sy,&ex,&ey); //起点(sx,sy)终点(ex,ey)
b[sx][sy]=1;
dfs(sx,sy,0);
printf("%d",minx);
return 0;
}
DFS求起点到终点最短路径,手动输入地图,5行4列,地图如下,起点(1,1)终点(4,3) 1是障碍 0是通路
最新推荐文章于 2022-05-25 08:54:40 发布