DFS求起点到终点最短路径,手动输入地图,5行4列,地图如下,起点(1,1)终点(4,3) 1是障碍 0是通路

来源:互联网 发布:部落战争mac电脑版 编辑:程序博客网 时间:2024/05/19 19:59
//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;}

0 0
原创粉丝点击