图5----某顶点到图中其余各顶点的最小路径算法

本文介绍了迪杰斯特拉算法的原理和应用,它用于找到图中某顶点到其他所有顶点的最短路径。算法过程包括初始化权重数组,不断寻找并更新最小边,直到覆盖所有顶点。虽然与Prim算法表面类似,但两者原理不同。邻接表和邻接矩阵的实现会影响算法的时间复杂度,最坏情况下邻接表可达O(n^3)。文中还提供了相关代码实现。
摘要由CSDN通过智能技术生成

1 吐槽:dijkstra算法音译成迪杰斯特拉。。。。。。


2算法:

某点与其他顶点的最小距离路径要么是与该顶点直接相连,要么经过已经生成的部分最小路径,然后与这个顶点相连。

直接相连的路径通过初始化权重数组完成,找到最小的边。用这个路径是去更新权重数组。再次找权重数组中未被选中的最小边,再次更新。。直到所有顶点都加入最小路径图中为止。

实际算法代码其实prim算法类似(原理不一样,prim是某时刻部分MST的顶点与外面顶点相连的最小边一定在MST中,dijkstra是与任意一点的最小路径不是直接相连就是经过已经找到的最小路径,原理证明也类似,都是反证法),prim算法找到部分MST中的顶点和外部顶点最小的边,选出来更新权重列表,选择最小的边并将顶点和边加入MST中,dijkstra算法找到最小的边与外部未存放在部分最小路径中的顶点的最小边,加入最小路径图,更新权重表,再次选择。


3 tips

邻接表由于在选择当次找到的最小路径的顶点是否与其他不在最小路径图中的顶点相连也要一个循环,因此最坏情况复杂度到了n的3次方。而邻接矩阵为平方。


代码:

package nuaa.ds;

public class MinPathOfGraph {
private CreateGraph g;
	
	private String[] vertexes;//邻接矩阵法所
	private int[][] vr;       //使用的成员变量
	
	private VertexNode[] vertexNodes;//邻接表所使用的成员变量
	
	
	/**
	 * 无向图,G在中间外围一圈按行顺序ABCDEF,F最后连个H
	 * @param c
	 */
	public MinPathOfGraph(CreateGraph c){
		this.g = c;
		switch(g){
		case AdjacencyMatrix://邻接矩阵
			this.vertexes = new String[]{"A","B","C","D","E","F","G","H"};
			vr = new int[8][8];
			int max = Integer.MAX_VALUE;
			//arcs都有权重
			vr[0] = new int[]{0,13,21,max,max,max,3,max};//好
			vr[1] = new int[]{13,0,max,25,max,max,34,max};
			vr[2] = new int[]{21,max,0,max,7,max,5,max};
			vr[3] = new int[]{max,25,max,0,max,18,
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值