图:Dijkstra

本文介绍了Dijkstra算法如何解决最短路径问题,通过广度优先方法进行求解。文中提供了伪代码描述,详细解释了算法的初始化过程、核心步骤以及主函数的实现,包括邻接矩阵的构建和节点状态的更新。
摘要由CSDN通过智能技术生成

Dijkstra:最短路径问题

使用广度优先方法解决最短路径问题

伪代码描述

  1 function Dijkstra(G, w, s)
  2 for each vertex v in V[G] //初始化 3 d[v] := infinity //将各点的已知最短距离先设成无穷大 4 previous[v] := undefined //各点的已知最短路径上的前趋都未知 5 d[s] := 0 //因为出发点到出发点间不需移动任何距离,所以可以直接将s到s的最小距离设为0
  6 S := empty set
  7 Q := set of all vertices
  8 while Q is not an empty set // Dijkstra演算法主体 9 u := Extract_Min(Q)
 10 S.append(u)
 11 for each edge outgoing from u as (u,v)
 12 if d[v] > d[u] + w(u,v) //拓展边(u,v)。  w(u,v)为从u到v的路径长度。
 13 d[v] := d[u] + w(u,v) //更新路径长度到更小的那个和值。
 14 previous[v] := u //纪录前趋顶点 

代码书写过程:

  1. 进行基本的结构体定义,图的建立(邻接矩阵/邻接表
  2. 初始化 Init_Graph 将Graph[][] = max
void InitGraph(int N)
{
   
    
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值