[数据结构] 图---求解单源最短路径:实现迪杰斯特拉算法、贝尔曼福特算法

本文介绍了图论中的两种单源最短路径算法——迪杰斯特拉算法和贝尔曼福特算法。迪杰斯特拉算法适用于所有边权重非负的情况,基于贪心思想,时间复杂度为O(n^2);而贝尔曼福特算法能处理负权值,但时间复杂度较高,为O(n^3)。两者都无法解决存在负权回路的问题。
摘要由CSDN通过智能技术生成

迪杰斯特拉算法

  • 要求图中所有边的权重非负,基于贪心算法,时间复杂度为O(n^2);
  • 具体实现:
    dist数组存放由起点到各顶点的最短路径长度(初始为正无穷)
    parentPath数组存放到各顶点当前路径中前一个结点的下标(初始为-1)
    set数组存放已经确定最短路径的顶点集合
void Dijkstra(const V& src, vector<W>& dist, vector<int>& parentPath){
   
		size_t n = _vertex.size();
		dist.resize(n, MAX_W);
		parentPath.resize(n, -1);

		int srci = getVertexIndex(src);
		dist[srci] = 0;
		parentPath[srci] = srci;  //起点并不一定是第一个顶点

		vector<bool> set(n, false
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值