首页 > 编程知识 正文

dijkstra最短路径算法步骤,A算法求最短路径

时间:2023-05-03 09:22:41 阅读:156784 作者:1240

首先阐述使用dfs算法解决迷宫问题的方法

代码部分/* * * @ author:zeeland * @ date:created in 2021/4/110336051 * @ version :0 $ */import Java.util.scancan wile(s.Hasnext ) ) ({ int n=s.nextInt ); a=new int[n 2][n 2]; v=new int[n 2][n 2]; for(intI=1; i=n; I ) for(intj=1; j=n; j () a[I] ) j )=s.nextint ); } DFS (1,1,0 ); system.out.println(min; 使用}/*DFS算法计算迷宫问题最小路径的最小步数为min,当前运行的步数为step */static int endx=5,endy=5,min=999; saticinta[]; //记录地图地形,1为空地,0为障碍物static int v[][]; //0为未访问,1为静态输入本地[ ] [ ]; //表示最短路径的//dfs算法输入坐标和步数//其中步数从起点到(x,y )点的步数publicstaticvoidDFS(intx,int y,int step ) intlocalocals ///判断是否到达终点,条件终止模块if(x==endxy==endy ) { System.out.println ) (到达终点) ); //判断到达终点时的步数是否小于minif(stepmin ) { min=step )的返回; () /深度搜索模块) /向每个方向进一步移动(/向下进一步移动) /判断:如果右边没有障碍物且没有标记此位置,则此位置为if(a[x1][y]==1v[x1][y]===0) v[x 1][y]=0; System.out.println ('后退了一步);//向上移动if (a [ x-1 ] [ y ]==1v [ x-1 ] [ y ]==0) { v[x - 1][y]=1; 移动到访问step的//下方的位置,当这条路陷入僵局时,v=0,返回DFS(x-1,y,step ); v[x - 1][y]=0; (向右移动//if ) a[x][y1]==1v[x][y1]==0) ) { v[x][y 1]=1; 移动到访问step的//下方的位置,当这条路陷入僵局时,v=0,返回DFS(x,y 1,step ); v[x][y 1]=0; System.out.println ()向右走了一步); (/)向左移动if ) a[x][y-1]==1v[x][y-1]==0) { v[x][y - 1]=1; 移动到访问step的//下方的位置,当这条路陷入僵局时,v=0,返回DFS(x,y - 1,step ); v[x][y - 1]=0; }}试着优化一下代码

/* * @ author:zeeland * @ date:created in 2021/4/110:51 * @ version :0 $ */package DFS; import java.util.Scanner; /**相关链接: * https://link.csdn.net/target=https://www.bilibili.com/video/bv 1bk 4y 1c 7w 2? p=2&; SPM _ id _ from=page driver */public class迷宫最短步长问题优化(采用/*DFS算法计算迷宫问题最小路径设到出口的最小步长数为min,当前运行的步长数为step *////记录地图地形,1为空地,0为障碍物static int v[][]; //0为未访问,1为对静态字符串本地的访问; //接受字符串中最短路径的publicstaticvoidmain (string [ ] args ) scanners=newscanner ) system.in; wile(s.Hasnext ) ) ({ int n=s.nextInt ); int m=s.nextInt (; 设置//2是因为序列越界异常a=new int[n 2][n 2]; //a表示地形,其中1表示障碍物0表示通道v=new int[m 2][m 2]; //v表示已经参观过的地方//初始化,不用(0,0 )。 这样,也可以不判定边界for(intI=1),i=n; I ) for(intj=1; j=m; j () a[I] ) j )=s.nextint ); }init(n,m ); }publicstaticvoidinit(intn,int m ) ) /最终位置的确定endx=n; 有几个endy=m的行//几个列的DFS (1,1,0 ); system.out.println(min; } //dfs算法输入坐标和步数//其中步数从起点到(x,y )点的步数publicstaticvoidDFS(intx,int y,int step ) intlocalx ) ) ///判断是否到达终点,条件终止模块if(x==endxy==endy ) { System.out.println ) (到达终点) ); //判断到达终点时的步数是否小于minif(stepmin ) { min=step )的返回; (//深度搜索模块) /向所有方向进一步移动(/向下移动一步)//判断:如果右边没有障碍物且没有标记这个位置,则可以访问这个位置的for(intI=0; i 3; I ) { int tx,ty; tx=x localx[i]; ty=y localy[i]; if(a[tx][ty]==1v[tx][ty]==0) ) { v[tx][ty]=1; 步骤; DFS(tx,ty,step ); v[tx][ty]=0; } }相关学习链接: https://www.bilibili.com/video/bv1bk 4y 1c7w 2? p=2spm_id_from=pageDriver

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。