当前位置: 首页 > wzjs >正文

衡水淘宝的网站建设杭州滨江网站建设公司

衡水淘宝的网站建设,杭州滨江网站建设公司,下载可以做动漫的我的世界视频网站,深圳建设厅网站官网迪杰斯特拉算法(Dijkstras Algorithm) 是一种用于计算单源最短路径的经典算法,由荷兰计算机科学家 艾兹赫尔迪杰斯特拉(Edsger W. Dijkstra) 于1956年提出。它的主要目标是找到从图中的某个源节点到所有其他节点的最短…

迪杰斯特拉算法(Dijkstra's Algorithm) 是一种用于计算单源最短路径的经典算法,由荷兰计算机科学家 艾兹赫尔·迪杰斯特拉(Edsger W. Dijkstra) 于1956年提出。它的主要目标是找到从图中的某个源节点到所有其他节点的最短路径。该算法适用于带权有向图无向图,且要求边的权重非负


核心思想

迪杰斯特拉算法采用贪心策略,通过逐步扩展已知的最短路径集合来求解问题。具体步骤如下:

  1. 初始化

    • 设置一个数组 dist[],用于存储从源节点到每个节点的最短距离。初始时,源节点的距离为 0,其他节点的距离为 (表示不可达)。

    • 设置一个数组 visited[],用于标记节点是否已被访问(即是否已找到从源节点到该节点的最短路径)。

    • 设置一个数组 prev[],用于记录每个节点的前驱节点,以便后续重建路径。

  2. 选择当前最短路径节点

    • 从未访问的节点中选择一个距离源节点最近的节点 u(即 dist[u] 最小)。

  3. 更新邻居节点的距离

    • 对于节点 u 的每个邻居节点 v,检查是否存在一条从源节点经过 uv 的路径,且该路径的距离比当前已知的 dist[v] 更短。

    • 如果存在,则更新 dist[v]dist[u] + weight(u, v),并记录 v 的前驱节点为 u

  4. 标记节点为已访问

    • 将节点 u 标记为已访问。

  5. 重复

    • 重复步骤 2~4,直到所有节点都被访问。


算法特点

  1. 适用范围

    • 适用于带权图,且边的权重必须非负

    • 如果图中存在负权边,迪杰斯特拉算法可能会失效,此时可以使用 Bellman-Ford 算法

  2. 时间复杂度

    • 使用**优先队列(堆)**优化后,时间复杂度为 O((V + E) log V),其中 V 是节点数,E 是边数。

    • 如果使用简单的数组实现,时间复杂度为 O(V²)

  3. 空间复杂度

    • 需要额外的空间存储 dist[]visited[]prev[],空间复杂度为 O(V)

算法实现示例

图数据定义

import java.util.ArrayList;
import java.util.List;//邻接矩阵表示图
public class YuGraph {//顶点List<Character> vList;//边的联通性,初始为0,不联通int [][] vG;//初始化YuGraph(List<Character> list){vList=list;vG=new int[list.size()][list.size()];for(int i=0;i<list.size();i++){for(int j=0;j<list.size();j++){vG[i][j]=Integer.MAX_VALUE;}}}//插入边public void insertVg(int i,int j,int val){vG[i][j]=val;}
}

插入的图

算法实现

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;//
public class Dijkstra {//1.迪杰斯特拉算法public static void Dijks(YuGraph yuGraph,int source){//顶点数量int n=yuGraph.vG.length;
//        System.out.println(n);//初始化最短距离int [] dist=new int[n];//初始设置为无限制大Arrays.fill(dist,Integer.MAX_VALUE);//目标点设置为0dist[source]=0;//访问数组标志,默认falseboolean [] flagArr=new boolean[n];//邻接矩阵int [][] vG=yuGraph.vG;//默认前驱节点int[] qianQU=new int [n];Arrays.fill(qianQU,-1);//遍历所有顶点找距离最小的索引开始更新邻居距离for(int i=0;i<n-1;i++){//开始访问的点int u=findMinIndex(dist,flagArr);
//            System.out.println(u);flagArr[u]=true;//开始访问它的邻居for(int v=0;v<n;v++){//没有被访问过,和上一个节点联通,且上一个节点有最短路径,并且新的路径比原来的还要小就更新if(!flagArr[v]&&vG[u][v]!=Integer.MAX_VALUE&&dist[u]!=Integer.MAX_VALUE&&dist[u]+vG[u][v]<dist[v]){//更新最短距离dist[v]= dist[u]+vG[u][v];//记录前驱qianQU[v]=u;}}}printResult(dist,qianQU);}//2.未访问,最短路径的点的序列public static int findMinIndex(int [] dist,boolean [] flagArr){int minIndex=-1;int minDis=Integer.MAX_VALUE;for(int i=0;i<dist.length;i++){if(flagArr[i]==false&&dist[i]<minDis){minIndex=i;minDis=dist[i];}}return minIndex;}//3.打印最短路径信息public static void printResult(int [] dist, int[] qianQU) {for (int i = 0; i < dist.length; i++) {System.out.print((char) ('A' + i));System.out.print(" 最短路径为: ");System.out.print(dist[i]);System.out.print(" 路径: ");printPath(qianQU, i);System.out.println();}}// 辅助方法:打印从源节点到目标节点的路径public static void printPath(int[] qianQU, int target) {if (qianQU[target] != -1) {printPath(qianQU, qianQU[target]);}System.out.print((char) ('A' + target) + " ");}public static void main(String[] args) {List<Character> list=new ArrayList<>();for(int i=0;i<5;i++){list.add((char)('A'+i));}YuGraph yuGraph=new YuGraph(list);//初始化图//ab 10 ac 2yuGraph.insertVg(0,1,10);yuGraph.insertVg(0,2,2);//bd 2yuGraph.insertVg(1,3,2);//cb5,cd2,ce10yuGraph.insertVg(2,1,5);yuGraph.insertVg(2,3,2);yuGraph.insertVg(2,4,10);//de 5yuGraph.insertVg(3,4,5);//调用迪杰斯特拉最短路径算法Dijks(yuGraph,0);}
}


文章转载自:

http://hUa1tZtn.nzfjm.cn
http://kJoM1GU9.nzfjm.cn
http://kuhfRg9B.nzfjm.cn
http://BDzaAwbo.nzfjm.cn
http://z1Qff4Jm.nzfjm.cn
http://5XFtUUPU.nzfjm.cn
http://L5z9nPdb.nzfjm.cn
http://gVme3xaN.nzfjm.cn
http://oM0AhkYS.nzfjm.cn
http://LMkaSPkP.nzfjm.cn
http://K8RW1P9T.nzfjm.cn
http://MfGhfDkD.nzfjm.cn
http://byODW1Io.nzfjm.cn
http://pdmUBDNy.nzfjm.cn
http://MqRP3jLy.nzfjm.cn
http://z9n7UKyZ.nzfjm.cn
http://n1Q2fWUo.nzfjm.cn
http://hIEonDIC.nzfjm.cn
http://st1HvqCd.nzfjm.cn
http://RsYNNfKk.nzfjm.cn
http://3bP9VEg0.nzfjm.cn
http://L4J01OTM.nzfjm.cn
http://3MEskrNM.nzfjm.cn
http://W8c8vPYo.nzfjm.cn
http://BRvZGIad.nzfjm.cn
http://TzKr6k8o.nzfjm.cn
http://WakNvicO.nzfjm.cn
http://UZv0ydub.nzfjm.cn
http://aa7qGeRu.nzfjm.cn
http://1JN1XqZ3.nzfjm.cn
http://www.dtcms.com/wzjs/678319.html

相关文章:

  • seo网站优化方建设公司网站征集信息的通知
  • 免费制作网站的基本流程辽宁网络科技有限公司
  • 怎么办个人网站室内装饰设计平面图
  • 四平网站建设在线咨询广州市网站公司
  • 福州微信网站开发wordpress 分类目录 文章
  • 网站建设讲话二级建造师报名的官网
  • 网站地图怎么做XML做电影网站要怎么样的主机
  • 中山 网站设计wordpress 树 插件
  • 即墨网站开发做网站和做app的区别
  • go语言做网站品牌设计师工资一般多少
  • 建设的访问网站需要密码课程的网站建设
  • 网上做设计兼职哪个网站好点河北网诚网站建设
  • 网站的公司wordpress管理页面密码忘记
  • 网站如何建设推广南宁高新区建设房产局网站
  • 常州市城市建设局网站课程网站开发背景和意义
  • 番禺区移动端网站制作琼中网站建设
  • 制作好的网站百度怎么推广产品
  • 郑州做网站报价站域名多少钱行情软件免费下载的网站
  • 竞价网站服务器网站建设行内资讯
  • 如何用云服务器做网站系统开发的需求分析阶段的重要工作之一是
  • 网站开发知识点总结电商网站购物流程
  • 成长厉程网站网络设计是干什么的工作
  • 个人网站可以做淘宝客电脑网站怎么做的
  • 微信支付 公司网站wordpress访问太慢
  • 会计做帐模板网站关键词的分类和优化
  • 做的最好的本地生活网站湖南网站推广公司
  • 中牟高端网站建设多模室内设计网站
  • 如何创建网站主页企业网站定制公司
  • 泉州建站平台如何获取免费的wordpress
  • 静安网站建设网站建设 上寻模板