最短路-Floyd算法

Matlab_Floyd算法求解最短路 最短路问题(short-path problem)是网络理论解决的典型问题之一,可用来解决管路铺设、线路安装、厂区布局和设备更新等实际问题。基本内容是:若网络中的每条边都有一个数值(长度、成本、时间等),则找出两节点(通常是源节点和阱节点)之间总权和最小的路径就是最短路问题。 解决最短路问题的Floyd算法: Floyd算法: 又称为插点法,是一种利用动态规划的思想寻找给定的... 阅读详情

Floyd算法思想:

1.初始化矩阵(i,j连接则矩阵的值为边的代价,否则为MAX)

2.计算 i 经过 k 到  j 的最短路径map[i,j]:=min{map[i,k]+map[k,j],map[i,j]}并保存路径

代码:

void Floyd(int n)//n为节点数,节点从1开始
{
    for(int k=1;k<=n;k++)
    {
        for(int i=1;i<=n;i++)
        {
            for(int j=1;j<=n;j++)
            {
                int temp=Metrix[i][k]+Metrix[k][j];
                if(Metrix[i][j]>temp)
                {
                    Metrix[i][j]=temp;
                    path[i][j]=path[i][k];//初始path[i][j]=j;
                }
            }
        }
    }
}
例题 http://acm.hdu.edu.cn/showproblem.php?pid=1385
<pre name="code" class="cpp">
#include <iostream>
#include<stdio.h>
#define N 120
#define MAX 0x3ffffff
using namespace std;
int Metrix[N][N];
int path[N][N];
int tax[N];
void Floyd(int n)
{
    for(int k=1;k<=n;k++)
    {
        for(int i=1;i<=n;i++)
        {
            for(int j=1;j<=n;j++)
            {
                int temp=Metrix[i][k]+Metrix[k][j]+tax[k];
                if(Metrix[i][j]>temp)
                {
                    Metrix[i][j]=temp;
                    path[i][j]=path[i][k];
                }
                else if(Metrix[i][j]==temp&&path[i][j]>path[i][k])path[i][j]=path[i][k];
            }
        }
    }
}
int main()
{
    int n;
    while(cin>>n&&n)
    {
        for(int i=1;i<=n;i++)
        {
            for(int j=1;j<=n;j++)
            {
                cin>>Metrix[i][j];
                if(Metrix[i][j]==-1)Metrix[i][j]=MAX;
                path[i][j]=j;
            }
        }
        for(int i=1;i<=n;i++)
        {
            cin>>tax[i];
        }
        Floyd(n);
        int src,des;
        while(scanf("%d%d",&src,&des)){
            if(src==-1&&des==-1) break;
            printf("From %d to %d :\n",src,des);
            printf("Path: ");
            int u = src;
            printf("%d",u);
            while(u != des){
                printf("-->%d",path[u][des]);
                u = path[u][des];
            }
            puts("");
            printf("Total cost : %d\n\n", Metrix[src][des]);
        }
    }
    return 0;
}


 


最短路径——Floyd算法 阅读详情

相关推荐

Floyd 算法--多源最短路

我们是把 k =0 的 i 和j 对应的数值都初始化了,这样才能去计算 k = 1 的时候 i 和 j 对应的数值。grid[i][j][k] = m,表示 节点i 到 节点j 以[1...k] 集合为中间节点的最短距离为m。你可以反过来想,节点i 到 节点j 中间一定经过很多节点,那么你能用什么方式来表述中间这么多节点呢?节点i 到 节点k 的最短距离 不经过节点k,中间节点集合为[1...k-1],所以 表示为。,同理节点k 到 节点j 的最短距离 也是不经过节点k,表示为。节点i 到 节点j 的。

qq_73704268的博客 823

Floyd求最短路(Floyd算法)

有4个城市8条路,公路上的数字表示这条公路的长短,并且路是单向的,现在要求我们求出任意两个城市之间的最短路程,。1.假设我们只允许经过1号城市,求任意两城市之间的最短路程,应该如何求呢?只需判断e[ i ][1]+e[1][ j ]是否比e[ i ][ j ]要小即可。2.假设我们允许经过1号城市和2号城市,求任意两点之间的最短路程,应该如何求呢?

weixin_63504072的博客 283

Floyd最短路算法

某公司在六个城市 c1, c2, …c6 中有分公司,从 i ci 到 cj的直接航程票价记在下述矩阵的 (I,j) 位置上。 (∞表示无直接航路) ,请帮助该公司设计一张城市 c1 到其它城市间的票价最便宜的路线图。

Floyd求最短路

Floyd一、Floyd算法又称为插点法二、代码实现 一、Floyd算法又称为插点法 路径矩阵 通过一个图的权值矩阵求出它的每两点间的最短路径矩阵。 [3] 从图的带权邻接矩阵A=[a(i,j)] n×n开始,递归地进行n次更新,即由矩阵D(0)=A,按一个公式,构造出矩阵D(1);又用同样地公式由D(1)构造出D(2);……;最后又用同样的公式由D(n-1)构造出矩阵D(n)。矩阵D(n)的i行j列元素便是i号顶点到j号顶点的最短路径长度,称D(n)为图的距离矩阵,同时还可引入一个后继节点矩阵path来

Axiayouqiaomu的博客 751

用友U8 API开发实战:手把手教你使用API资源管理器完成单据操作

本文详细介绍了用友U8 API开发实战,重点讲解如何使用API资源管理器完成采购订单、销售出库单等核心业务单据的全生命周期管理。从开发环境搭建到单据查询、新增、修改、删除等基础操作,再到高级功能如审核状态管理、业务事件处理和自定义项扩展,帮助开发者快速掌握用友U8接口开发技巧,提升企业数字化转型效率。

weixin_28607671的博客 595

Mac新手必看:用Homebrew安装wget的保姆级教程,附常见报错一键修复

本文为Mac新手提供使用Homebrew安装wget的详细教程,涵盖从Homebrew安装到wget基础使用的全流程,并附常见报错一键修复方案。通过本指南,用户可轻松掌握命令行下载工具wget的安装与使用技巧,解决Mac环境下资源下载的各种问题。

weixin_30635053的博客 366

基于DP的最短路算法---Floyd

简介: Floyd算法又称为插点法,是一种利用动态规划的思想寻找给定的加权图中多源点之间最短路径的算法,与Dijkstra算法类似。该算法名称以创始人之一、1978年图灵奖获得者、斯坦福大学计算机科学系教授罗伯特·弗洛伊德命名。 特点: 1.可以求任意两个结点之间的最短路的 2.复杂度比较高,但是常数小,容易实现(三重循环) 3.适用于任何图,包括有向图,无向图,边权正负均可(不存在负环) 核心思想: 我们枚举三个点 i , j , k; 对于两个点(i , j) , d[i , j] 表.

qq_47982709的博客 885

Windows下Colmap编译安装全攻略:从Boost到CUDA的避坑指南

本文详细介绍了在Windows系统下编译安装Colmap三维重建工具的完整流程与实战经验。针对Boost库版本兼容性、CUDA与Visual Studio的版本匹配等常见难题提供了具体的避坑指南和解决方案,帮助开发者高效完成从环境配置到最终部署的全过程。

weixin_28235513的博客 198

最短路算法——Floyd-Warshall

在更多的应用场景中,需要用不同的算法来解决。下表总结了一些经典算法,除了贪心最优搜索之外,其他都是最优性算法,即得到的解是最短路径。表中的 m 是边的数量,n 是点的数量。 一、BFS BFS 也是一种很不错的最短路算法。但 BFS 只适合一种场景:任意的相邻两点之间距离相等,一般把这个距离看成 1,称为“1跳”,从起点到终点的路径长度就是多少个“跳数”。在这种场景下,查找一个起点到一个终点的最有短距离,BFS 是最优的最短路径算法,计算复杂度是 O(n),n 是图上点的...

指北针_N的博客 6890

海思ISP调优实战:从实验室到真实场景的IPC相机图像质量优化指南

本文深入探讨海思ISP调优在IPC相机图像质量优化中的实战应用,从实验室标定到真实场景部署的全链路调优方法。重点解决光照动态范围、色温变化和噪声特性等核心问题,提供AE权重表配置、CCM标定、3DNR时域滤波等关键技术方案,帮助实现从理论到实践的图像质量提升。

s3t4u的博客 750

IP2315高效同步降压充电IC在快充应用中的硬件与软件控制策略

本文深入解析IP2315高效同步降压充电IC在快充应用中的硬件与软件控制策略,涵盖其核心特性、硬件电阻调节技巧、I2C动态控制方案、散热设计优化及典型问题排查。IP2315支持多种快充协议,如Type-C PD、华为FCP等,适用于便携设备快速充电需求,并通过I2C实现灵活的充电参数设置,提升充电效率与安全性。

weixin_29248313的博客 539

Floyd算法(854. Floyd求最短路)

本篇博客就来讲解一下求解多源汇最短路问题中的Floyd算法。什么是多源汇最短路?就是求n个点中任意两点的距离。

2301_77160836的博客 1220

lammps教程:官方自带eam_database程序拟合EAM势方法介绍

使用lammps模拟金属体系,最常用的势函数为eam、meam势。 对于大多数金属或者合金来说,可以从网上下载相对应的eam或meam势力场文件。 而对于一些新的合金材料,可能就找不到相对应的力场文件。 解决的方法有两种,一是采用混合势(pair_style hybrid),第二种方法是自己拟合势函数文件。 混合势的写法在前面文章中已经介绍过,本文介绍一种拟合EAM势的方法。 该方法是运行Xiaowang Zhou编写的一个拟合程序,该程序可自动生成所需要的合金势。 这个程序能够拟合的合金元素有: Cu,

lammps_jiayou的博客 4614

多源最短路算法——Floyd算法

1.多源最短路简介: 我们知道单源最短路是指从某一个源点到图中的其它顶点的最短路。 多源最短路就是指每一个点到图中其他顶点的最短路。 那么有的人肯定想我知道求单源最短路的算法了,那么有多少个点我就求多少次呗,这样做时间效率不高,空间效率也极其低。 那么有什么算法求解多源最短路呢?——Floyd 2.Floyd简介: 3.三维空间Floyd核心代码: int g[N][N]; // 邻接矩阵存图...

ly's Blog 3242

超声波传感器(CHx01) 学习笔记 Ⅲ-API介绍

超声波传感器(CHx01) API介绍

nicole088的专栏 1386

【WRF安装】WRF环境配置移植详细说明

【WRF安装】WRF环境配置移植详细说明

WW、forever的博客 819

最短路算法(1)——floyd算法

本章将介绍原理及floyd的算法实现。

2301_76390048的博客 680

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

最短路算法——Dijkstra,Floyd

本文介绍了两种经典的最短路径算法:Dijkstra算法和Floyd算法。Dijkstra算法采用贪心策略和堆优化,适用于单源非负权图的最短路径问题,时间复杂度为O(ElogV)。Floyd算法通过动态规划思想解决多源最短路径问题,使用三层循环枚举中转点更新距离矩阵,时间复杂度为O(V³)。两种算法分别适用于稀疏图和稠密图:Dijkstra适合边少点多的情况,而Floyd适合点多边少的情况。文章通过洛谷例题展示了两种算法的具体实现,并对比了它们的适用场景和性能特点。

CChisato_的博客 970

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

Dijkstra与Floyd求最短路算法简介

Dijkstra算法是一种用于求解带非负权值边的单源最短路径问题的经典算法。本文介绍了Dijkstra算法的核心思想:通过贪心策略,每次选择当前距离起点最近的未确定节点,更新其邻近节点的距离。文章给出了邻接表实现的C++代码示例,并详细解释了优先队列优化、距离初始化和路径更新的关键步骤。此外,还通过5个典型例题(包括模板题和应用题)展示了Dijkstra算法的实际应用,如处理双向边、最小瓶颈路径等问题。这些例题涵盖了从基础模板到变式应用的完整学习路径,适合算法初学者理解和掌握Dijkstra算法。

2403_88489850的博客 876

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

算法学习——最短路三大算法(Floyd,Djstra,SPFA算法)

在图论中,有一个问题是求两点之间的最短路。解决最短路有三种算法:Floyd算法,Dijstra算法,SPFA算法。 这一次我们单独讲一下Dijstra算法。 在一个图内,我们需要找到起点X0到终点Xn的最短路,如果我们去遍历每一个点,效率就会十分低下。因为在每一个点都要判断下一个点就非常繁琐,时间复杂度很容易变成指数级的。 我们用数组U来记录两点之间的距离。 准备一个数组S,表示起点到任意一点 的距离,初始值设为无穷。 然后在U中寻找一个和起点距离最短(这里指直接与起点相连)的点,把它加入数组S,

m0_57811707的博客 1222

最短路——floyd,dijstra,spfa算法

一直想整理一下最短路,好久之前学的(都忘了差不多了),再回顾一下,增加印象 最短路; 1.Floyd最短路算法; (被戏称为五行算法)它可以求出一个图中任意两点之间的最短路距离,即多源最短路算法,但是复杂度为O(n3)很大,所以一般比赛用到的机会很少,1s的时间要求下,最多只能求1000点之间的最短路。优点就是代码短,好理解。 主要思想就是用图中的一个点k来判断能不能优化i到j之间的最短距...

HANGANG的博客 327

算法 {Floyd最短路,Floyd传递关系}

1

qq_66485519的博客 301

最短路算法 dijkstra bellman-ford还有Floyd

最短路算法 最短路算法主要有dijkstra bellman-ford还有Floyd三种 dijkstra算法 计算边权为正的单源最短路。同时适用于有向图和无向图 bellman-ford算法 floyd算法 ...

zpf1998的博客 341

图论-最短路Floyd算法

Floyd算法是一种基于动态规划的全源最短路算法。它通过三重循环逐步更新节点间的最短路径:外层循环引入中间节点k,内层双重循环遍历所有节点对(i,j),比较直接路径和经过k点的间接路径。

2402_88147924的博客 610

图论 24. Floyd算法(多源最短路问题)

​。

m0_49844155的博客 1281
上一篇: 使用NPOI对于Excel与数据库表转换
下一篇: 最短路-Dijkstra算法
WayToAccept
博客等级 码龄14年 21粉丝 56原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值