迪杰斯特拉(Dijkstra)算法java

迪杰斯特拉算法(Java) 迪杰斯特拉(Dijkstra)算法是典型最短路径算法,用于计算一个顶点到其他顶点的最短路径。它的主要特点是以起始点为中心向外层层扩展(广度优先搜索思想),直到扩展到终点为止。算法过程设置出发顶点为v,顶点集合V{ v1, v2,vi …} ,v到V中各顶点的距离构成距离集合Dis,Dis{ d1,d2,di…},Dis集合记录着b到图中各顶点的距离(到自身距离为0,v 到vi距离对应为di)1)从Dis中选择值最小的di移出Dis集合,同时移出V集合中对应的顶点vi,此时的v到vi即是最短路径。 阅读详情

一.应用场景

1.战争时期,胜利乡有 7 个村庄(A, B, C, D, E, F, G) ,现在有六个邮差,从 G 点出发,需要分别把邮件分别送到A, B, C , D, E, F 六个村庄

2.各个村庄的距离用边线表示(权) ,比如 A – B 距离 5 公里

3.问:如何计算出 G 村庄到 其它各个村庄的最短距离?

4.如果从其它点出发到各个点的最短距离又是多少?

        这里就有点和最小生成树算法有点不一样了,这个是找出发点最短路径之和,运用广搜思想

二.代码实现

class Graph{
    char[] vertexList;//存储顶点
    int[][] edges;//存储图

    Graph(char[] vertexList,int[][] edges){
        this.vertexList = vertexList;
        this.edges = edges;
    }

    public void showGraph() {
        for(int i = 0;i<vertexList.length;i++){
            System.out.printf("%c",vertexList[i]);
        }
        for(int i = 0;i<edges.length;i++){
            System.out.println();
            for(int j = 0;j<edges[i].length;j++){
                System.out.printf("%5d",edges[i][j]);
            }
        }
    }
}
//已访问顶点集合
class VisitedVertex{
    //记录各个顶点是否被访问过
    public boolean[] alreadly_arr;
    //每个下标值对应为前一个顶点下标,会动态更新
    public int[] pre_visited;
    //记录出发顶点到其他所有顶点距离
    public int[] distance;

    VisitedVertex(int length,int index){
        this.alreadly_arr = new boolean[length];
        this.distance = new int[length];
        this.pre_visited = new int[length];
        Arrays.fill(distance,65535);
        distance[index] = 0;
    }

    public boolean isVisited(int index){
        return alreadly_arr[index];
    }

    public void updateDis(int index,int len){
        distance[index] = len;
    }

    public void updatePre(int pre,int index){
        pre_visited[pre] = index;
    }
}
//迪杰斯特拉算法实现
class Dijkstra{
    Graph graph;
    VisitedVertex vv;
    Dijkstra(Graph graph,VisitedVertex vv){
        this.graph = graph;
        this.vv = vv;
    }
    public void djs(int index){
        update(index); //更新 index 顶点到周围顶点的距离和前驱顶点
        for (int i = 1; i < graph.vertexList.length; i++) {
            index = updateArr(); // 选择并返回新的访问顶点
            update(index); ; // 更新 index 顶点到周围顶点的距离和前驱顶点
        }
    }
    //更新两个数组
    public void update(int index){
        int len ;
        for(int j = 0;j<graph.edges[index].length;j++){
            len = vv.distance[index]+graph.edges[index][j];//就是直接距离加上

            if(!vv.isVisited(j)&&len<vv.distance[j]){
                vv.updateDis(j,len);
                vv.updatePre(j,index);
            }
        }
    }
    //确定下一个出发顶点
    public int updateArr() {
        int min = 65535, index = 0;
        for (int i = 0; i < vv.alreadly_arr.length; i++) {
            if (vv.alreadly_arr[i] && vv.distance[i] < min) {
                min = vv.distance[i];
                index = i;
            }
        }
        vv.alreadly_arr[index] = true;
        return index;
    }
}

图解迪杰斯特拉(Dijkstra)算法(Java语言实现) 概述 感觉迪杰斯特拉好难,才学会的这个算法,所以写下博客加深理解。 Dijkstra算法是从一个顶点到其余各顶点的最短路径算法,解决的是带权图中最短路径问题。Dijkstra算法主要特点是以起始点为中心向外层层扩展,直到扩展到终点为止。 Dijkstra算法将图中的节点集分为: 1.最短路径计算完成的节点集S 2.最短路径未计算完成的节点集T 首先选择一个起点,然后每次将从T中挑选“起点->... 阅读详情

相关推荐

Java 实现Dijkstra(迪杰斯特拉)算法

关键字: Dijkstra(迪杰斯特拉) 小顶堆 Java  package com.cn.graph; /** * Node 来表示图中的点的信息,其中value表示的是其到原点的距离,vex代表的是哪一个点。 * 在我们建立小顶堆的时候,value的值与vex一同交换,因此value与vex总是成对出现的。 * 首先我们用数组来保存有向图的信息,m代表着无

daijope的专栏 4454

java实现Dijkstra算法

解决的问题: 求解单源最短路径,即各个节点到达源点的最短路径或权值 考察其他所有节点到远点的最短路径和长度 局限性: 无法解决权值为负数的情况参数:Dijkstra算法步骤: (1)初始化: 顶点集S: 顶点A到自已的最短路径长度为0。只包含源点,即S={A} 顶点集U: 包含除v0外的其他顶点. 即U={B,C,D,E,F} dist[]: 源点还不能到达的节点,其权值为∞path[]: 记录当前节点的前驱节点下标(源点还不能到达的节点为-1)(2)从U中选取一个节点,它是源点A到然后把加入S中(此.

欢迎来到烟火气知识小天地!这里记录生活、工作中的 “小麻烦”,从软件故障到生活难题,我会毫无保留分享解决思路与方法,愿成为你排忧解难时的温暖参考,伴你在解决问题路上稳步前行。 8579

java实现迪杰斯特拉(Dijkstra)算法求解最短路问题

迪杰斯特拉(Dijkstra)算法是由荷兰计算机科学家狄克斯特拉于1959年提出的。是寻找从一个顶点到其余各顶点的最短路径算法,可用来解决最短路径问题。 迪杰斯特拉算法采用贪心算法的策略,将所有顶点分为已标记点和未标记点两个集合,从起始点开始,不断在未标记点中寻找距离起始点路径最短的顶点,并将其标记,直到所有顶点都被标记为止。需要注意的一点是该方法不能处理带有负权边的图,下面我们举出一个实例并通过迪杰斯特拉方法对其进行求解。 ...

Xing_LG的博客 4万+

【数据结构与算法】java有向带权图最短路径算法-Dijkstra算法(通俗易懂)

有向图最段路径原理及java代码实现

Hanson的博客 3337

Dijkstra算法的Java实现及应用

希望本文对你有所帮助!Dijkstra算法的基本原理是,通过不断遍历未确定最短路径的节点,以逐步更新各个节点的最短路径值,从而找到从源节点到其他所有节点的最短路径。创建一个距离数组dist[],用于存储从源节点到各个节点的当前最短距离,初始化dist[]中的值为正无穷大,表示暂时未能确定最短路径;b. 遍历与节点u相邻的节点v,并计算从源节点到节点v的距离newDistance,即dist[u]加上节点u到节点v的边的权值;循环结束后,dist[]中存储的就是从源节点到其他所有节点的最短路径值。

2301_79331328的博客 421

Java实现Dijkstra算法

在dijkstra方法中,我们首先初始化起始节点到其他节点的距离为正无穷大,然后将起始节点的距离值设为0,并加入优先队列中。接下来,我们不断从队列中取出距离值最小的节点,更新其相邻节点的距离值,直到队列为空。该类包含顶点和边的信息。它的主要思想是通过不断更新起始节点到其他节点的距离值,逐步找到最短路径。在上述代码中,我们使用了一个优先队列来存储待处理的节点,并根据距离值进行排序。同时,我们使用一个列表来记录起始节点到各个节点的距离值。在上述代码中,我们创建了一个包含5个顶点的图,并添加了各个顶点之间的边。

HackMasterX的博客 199

Java实现之迪杰斯特拉(Dijkstra)算法

迪杰斯特拉(Dijkstra)算法是典型最短路径算法,用于计算一个结点到其他结点的最短路径。它的主要特点是以起始点为中心向外层层扩展(广度优先搜索思想),直到扩展到终点为止。

qq_64580912的博客 2448

matinal:S4 HANA 详解ACDOCA与BSEG的区别都在这了

当你在Coding Block中添加自定义字段的时候

matinal 當冬夜漸暖 。公众号:matinal 4582

java迪杰斯特拉算法_「dijkstra算法」Dijkstra算法 java实现 - seo实验室

dijkstra算法import java.util.HashMap;import java.util.HashSet;import java.util.Map.Entry;/**** dijkstra算法* 适用范围:没有权值为负数的边**/// no negative weightpublic class Code_06_Dijkstra {public static HashMap dijk...

weixin_28974441的博客 143

Qwen-Image-2512 本地部署完全指南:从零开始搭建你的AI绘图工作站

阿里通义团队开源了Qwen-Image-2512模型,这款AI绘图模型在人物真实感、自然细节和文字渲染上表现惊艳,甚至在盲测中超越部分闭源模型。本文提供了详细的本地部署教程,从硬件准备、环境安装到使用ComfyUI运行模型,手把手教你生成第一张AI图片,并分享了进阶技巧和免费在线体验方式。

莫潇羽的个人博客 2427

从零构建基于ZYNQ与AD9361的SDR信号源:FPGA逻辑与射频前端的协同设计

本文详细介绍了从零开始构建基于ZYNQ与AD9361的SDR信号源的完整流程。通过解析FPGA逻辑与射频前端的协同设计,重点阐述了如何利用FPGA生成基带信号,并通过ARM处理器配置AD9361,最终实现一个可编程的2.4GHz载波信号发生器。内容涵盖硬件选型、Vivado环境搭建、AXI总线通信、LVDS接口设计及软件驱动开发,为SDR开发者提供了实用的实战指南。

weixin_29200485的博客 214

迪杰斯特拉(Dijkstra)算法学习(Java)

迪杰斯特拉(Dijkstra)算法学习(Java) 一、迪杰斯特拉(Dijkstra)算法介绍 迪杰斯特拉(Dijkstra)算法是典型最短路径算法,用于计算一个结点到其他结点的最短路径。它的主要特点是以 起始点为中心向外层层扩展**(广度优先搜索思想)**,直到扩展到终点为止。 二、迪杰斯特拉(Dijkstra)算法过程 设置出发顶点为 v,顶点集合 V{v1,v2,vi…},v 到 V 中各顶点的距离构成距离集合 Dis,Dis{d1,d2,di…},Dis 集合记录着 v 到图中各顶点的距离(到自身

Inmaturity_7的博客 438

Android无线调试:adb tcpip连接实战指南

本文详细介绍了Android无线调试的完整流程,重点讲解如何使用adb tcpip命令通过Wi-Fi连接设备,摆脱数据线束缚。涵盖环境配置、连接实战、稳定性优化及常见问题排查,帮助开发者高效实现无线adb调试,提升工作效率。

pink的博客 722

迪杰斯特拉(Dijkstra)算法java代码实现

算法核心思想是:每次选择一个距离起点最近的未访问节点,然后通过该节点更新到其他节点的距离

Hurry_jie的博客 501

BAPI_OUTB_DELIVERY_CHANGE扩展指南:利用EXTENSION2与SMOD_V50B0001实现自定义字段更新

本文详细解析了如何利用BAPI_OUTB_DELIVERY_CHANGE的EXTENSION2参数与增强点SMOD_V50B0001,在不修改标准代码的前提下,安全、标准地更新SAP交货单的自定义字段。通过清晰的步骤指南和实战代码示例,帮助开发者掌握通过增强字段实现定制化业务需求的完整流程与调试技巧。

fanta的博客 451

Unreal Engine开发:多人联机与网络同步_延迟补偿与预测

通过延迟补偿和预测技术,我们可以显著减少网络延迟对多人在线动作游戏的影响,提升玩家的体验。延迟补偿主要在服务器端实现,通过回溯时间点来更准确地处理输入和事件。预测技术主要在客户端实现,通过预先计算玩家的动作结果来减少延迟感。结合这两种技术,可以实现更平滑、更公平的多人游戏体验。

chenlz2007的博客 1191

迪杰斯特拉(Dijkstra)算法 JAVA实现

迪杰斯特拉(Dijkstra)算法 JAVA实现 迪杰斯特拉(Dijkstra)算法(贪心算法)是典型最短路径算法,用于计算一个节点到其他节点的最短路径。 它的主要特点是以起始点为中心向外层层扩展(广度优先搜索思想),直到扩展到终点为止。 public class Dijkstra { /** * 两点之间路线不通 */ private static final int M = 10000; public static void main(String[]

大西瓜的博客 5617

VAY 是 SAP 自动科目确定(OBYC-GBB)中的科目修改码,专用于带科目分配对象的销售订单发货场景,核心是触发 “Dr 成本要素科目(如销售费用 / 特定成本对象) Cr 库存商品” 的分录,

摘要:VAY是SAP中用于带科目分配对象(如成本中心、WBS)的销售订单发货的科目修改码,与标准VAX场景不同,它生成"借成本要素科目/贷库存商品"的分录。配置路径为OBYC-GBB-VAY,需确保借方科目为成本要素。典型业务场景包括免费样品、项目专用发货等。常见问题包括VAY未触发或科目记账错误,需检查销售订单科目分配、移动类型设置及OBYC配置。特殊场景建议单独配置科目以便费用分析。

金牌架构师 1254

算法之迪杰斯特拉(dijkstra)java

【代码】算法之迪杰斯特拉(dijkstra)java。

lcarus008的博客 308

基于STM32设计的水下水质检测装置(微信小程序)(205)

本项目设计了一款基于STM32微控制器为核心的水下水质检测设备,该设备具有高度集成化、智能化的特点,能够实时监测水深、温度、浊度及溶解性总固体(TDS)等关键水质参数,并通过4G网络将数据上传至腾讯云IOT物联网平台,实现远程监控和数据分析。同时,为了便于操作和移动观测,还配套开发了微信小程序,用户可通过微信小程序实时查看并控制设备的各项功能,如调整下潜深度等。

1252

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

java数据结构和算法——迪杰斯特拉(Dijkstra)算法

一、迪杰斯特拉(Dijkstra)算法介绍 迪杰斯特拉(Dijkstra)算法是典型最短路径算法,用于计算一个结点到其他结点的最短路径。 它的主要特点是以起始点为中心向外层层扩展(广度优先搜索思想),直到扩展到终点为止。 二、迪杰斯特拉(Dijkstra)算法过程 设置出发顶点为v,顶点集合V{v1,v2,vi…},v到V中各顶点的距离构成距离集合Dis,Dis{d1,d2,di…},Dis集合记录着v到图中各顶点的距离(到自身可以看作0,v到vi距离对应为di) 从Dis中选择值最小的di并移出Di

小志的博客 1144

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

dijkstra伪代码翻译java_Dijkstra-迪杰斯特拉算法-理解(伪代码)(有向图 无向图)...

迪杰斯特拉算法介绍最短路径算法:用于计算一个节点到其他节点的最短路径。(一对多)特点:是以起始点为中心向外层层扩展(?)基本思想:指定起点s,即从顶点s开始计算。引进两个集合S和U。S:记录已求出最短路径的顶点(以及相应的最短路径长度),U:记录还未求出最短路径的顶点(以及该顶点到起点s的距离)。-初始时,S中只有起点s;U中是除s之外的顶点。U中顶点的路径是"起点s到该顶点的路径"。然后,从U中...

weixin_39608657的博客 423

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

迪杰斯特拉(Dijkstra)算法JAVA实现

迪杰斯特拉算法JAVA代码实现

m0_64427937的博客 3793

java实现Dijkstra迪杰斯特拉算法

思路: (1)迪杰斯特拉处理的是二阶矩阵,代表各个端点之间的权。 (2)需要一个标识数据,用来表示哪个点已经确定了最短路径。 (3)还需要一个队列,用来存储距离当前端点最近的几个端点。不过这里没有存储进队列,只在比较的过程中把最小的索引值取出来。 (4)距离每个端点的最短距离的判定是起点到这个点的距离和起点通过某个点到这个点的距离之间较小值。 程序如下,可直接运行。 public class Ma...

weixin_44893585的博客 261

迪杰斯特拉算法(Dijkstra)-Java实现

迪杰斯特拉算法也是求两点之间最短路径的算法,它的思想和普利姆算法有点相似,不断通过已找到点集合和未找到点之间的集合之间的最短路径。 这个算法需要用到三个数组,一个是存储结点是否已经访问,一个是结点到起始点的最短距离,还有一个是结点到起始点第一个需要经过的点。我们不断通过迭代更新这三个数组,最终就可以得到每个点到起始点的最短距离数组了。 接下来可以结合代码理解,我也把代码注释写的尽量详细。 //是否已经访问过 private boolean[] isVisited; //第一个经过的结点 private in

W2044377578的博客 427

迪杰斯特拉算法(Dijkstra)——java实现

迪杰斯特拉算法(Dijkstra) 1.应用场景-最短路径问题 看一个应用场景和问题: (1)战争时期,胜利乡有7个村庄(A, B, C, D, E, F, G) ,现在有六个邮差,从G点出发,需要分别把邮件分别送到 A, B, C , D, E, F, G7个村庄 (2)各个村庄的距离用边线表示(权) ,比如 A – B 距离 12公里 (3)问:如何计算出D村庄到 其它各个村庄的最短距离? (4)如果从其它点出发到各个点的最短距离又是多少? 2.迪杰斯特拉(Dijkstra)算法介绍 迪杰斯特拉(Di

xiaoshiguang3的博客 1233
上一篇: 外观模式详解
下一篇: 文件上传与下载
NoOne_lin
博客等级 码龄5年 2粉丝 52原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值