码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • [数据结构] 图---求解多源最短路径:实现弗洛伊德算法


    多源最短路径

    • 弗洛伊德算法

    弗洛伊德算法

    • 解决图中任意两点之间的最短路径问题
    • 具体实现:
      vvdist矩阵存放任意两个顶点间的最短路径长度(初始为正无穷)
      vvparentPath矩阵存放任意两个顶点路径间,最后一个顶点的前一个结点的下标(初始为-1)
    void FloydWarShall(vector<vector<W>>& vvdist, vector<vector<int>>& vvparentPath){
    		size_t n = _vertex.size();
    		//初始化两个矩阵
    		vvdist.resize(n);
    		vvparentPath.resize(n);
    		for (size_t i = 0; i < n; i++){
    			vvdist[i].resize(n, MAX_W);
    			vvparentPath[i].resize(n, -1);
    		}
    
    		//更新直接相连的两条边,与matrix数组有关
    		for (size_t i = 0; i < n; i++){
    			for (size_t j = 0; j < n; j++){
    				if (i == j){
    					vvdist[i][j] = 0;
    				}
    				if (_matrix[i][j] != MAX_W){
    					vvdist[i][j] = _matrix[i][j];
    					vvparentPath[i][j] = i;
    				}
    			}
    		}
    
    		//更新最短路径(动规的思想)
    		for (size_t k = 0; k < n; k++){
    			for (size_t i = 0; i < n; i++){
    				for (size_t j = 0; j < n; j++){
    					//若i->j路径上,经过k时路径更小,则更新
    					if (vvdist[i][k] != MAX_W && vvdist[k][j] != MAX_W 
    						&& vvdist[i][k] + vvdist[k][j] < vvdist[i][j]){
    						vvdist[i][j] = vvdist[i][k] + vvdist[k][j];
    						//若k->j相连,上一个结点为k,vvparentPath[k][j]==k;
    						//若不相连,k->..->x->j,上一个结点为x,vparentPath[k][j]==x
    						vvparentPath[i][j] = vvparentPath[k][j];
    					}
    				}
    			}
    		}
    	}
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
  • 相关阅读:
    6.typescript类
    【Java项目介绍和界面搭建】拼图小游戏——打乱图片顺序
    Vector底层源码
    Visio 画大括号
    Netty(10)协议设计与解析(IdleStateHandler:空闲检测器、心跳)
    如何杜绝 spark history server ui 的未授权访问?
    使用GPT2-Chinese进行中文预测生成文章
    webpack优化系列三:vue子目录路径更改---publicPath
    C# 任务调度 c# TaskScheduler
    【实战】手把手教你从 0 到 1 搭建一套 RocketMQ 集群
  • 原文地址:https://blog.csdn.net/Darling_sheeps/article/details/127759790
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号