Floyd算法又称为插点法,是一种利用动态规划的思想寻找给定的加权图中多源点之间最短路径的算法,与Dijkstra算法类似。该算法名称以创始人之一、1978年图灵奖获得者、斯坦福大学计算机科学系教授罗伯特·弗洛伊德命名。

在计算机科学中,Floyd-Warshall算法是一种在具有正或负边缘权重(但没有负周期)的加权图中找到最短路径的算法。算法的单个执行将找到所有顶点对之间的最短路径的长度(加权)。 虽然它不返回路径本身的细节,但是可以通过对算法的简单修改来重建路径。 该算法的版本也可用于查找关系R的传递闭包,或(与Schulze投票系统相关)在加权图中所有顶点对之间的最宽路径。

Floyd-Warshall算法是动态规划的一个例子,并在1962年由Robert Floyd以其当前公认的形式出版。然而,它基本上与Bernard Roy在1959年先前发表的算法和1962年的Stephen Warshall中找到图形的传递闭包基本相同,并且与Kleene的算法密切相关 在1956年)用于将确定性有限自动机转换为正则表达式。算法作为三个嵌套for循环的现代公式首先由Peter Ingerman在1962年描述。

该算法也称为Floyd算法,Roy-Warshall算法,Roy-Floyd算法或WFI算法。

下面是Floyd-Warshall算法的使用:

#include<bits/stdc++.h>
using namespace std;
int N,n,no_way=999999999,k,p,q;
double mp[1000][1000];
int main(){system("pause");
label:system("cls");  cout<<"城市数量:"; cin>>n;cout<<"数据数量:"; cin>>k;system("cls");for(int i=0;i<n+10;i++)for(int j=0;j<n+10;j++) mp[i][j]=no_way;for(int i=0;i<n+10;i++) for(int j=0;j<n+10;j++) if(i==j) mp[i][j]=0;cout<<"接下来输入"<<k<<"组数据。\n"; for(int i=1;i<=k;i++){cout<<"第"<<i<<"组数据。\n";int a,b;cout<<"出发地:";cin>>a;cout<<"目的地:";cin>>b;cout<<"路程  :";cin>>mp[a][b]; system("cls");}system("cls");cout<<"现在请核对数据:"<<endl;for(int i=0;i<n+10;i++) for(int j=0;j<n+10;j++) if(mp[i][j]!=no_way&&mp[i][j]!=0) cout<<"从"<<i<<"城到"<<j<<"城有"<<mp[i][j]<<"公里。"<<endl; cout<<endl<<"正确请回A,否则回B(如果回B,需重新输入数据):";string s;cin>>s;if(s=="B")goto label; else system("cls");cout<<"您位于的城市:";cin>>p;cout<<"您的目的地  :";cin>>q;for(int i=0;i<=n;i++)for(int j=0;j<=n;j++)for(int k=0;k<=n;k++)mp[j][k]=min(mp[j][k],mp[j][i]+mp[i][k]);if(mp[p][q]!=no_way)cout<<"从"<<p<<"城到"<<q<<"城最少要行"<<mp[p][q]<<"公里。\n\n";elsecout<<"从"<<p<<"城到"<<q<<"城没有路线。"<<endl<<endl;system("pause");system("cls");cout<<"是否要继续计算?继续请回A,退出回B:";cin>>s;if(s=="A")goto label; else system("cls");cout<<"再见!欢迎您再次使用!"<<endl<<"ヾ( ̄▽ ̄)Bye~Bye~";                                                                                                                                                                                                                                                        return 0;
}
//ACplease!!!/*  printf("                                                                \n");printf("                                                                \n");printf("       * * *               * * *             * * *             * * *            \n");printf("     *       *           *       *         *      *          *       *         \n");printf("    *        *          *         *       *        *        *         *        \n");printf("            *           *         *                *                  *      \n");printf("           *            *         *               *                  *     \n");printf("          *             *         *              *                  *       \n");printf("         *              *         *             *                  *            \n");printf("        *               *         *           *                  *            \n");printf("      *                  *       *          *                  *           \n");printf("    * * * * * * *          * * *          * * * * * * *      * * * * * * *                           \n");
*/    

————————————————
版权声明:本文为CSDN博主「joe_zxq21」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明,  不欢迎   欢迎大家的转载和关注

最短路径之Floyd-Warshall算法相关推荐

  1. C++floyd warshall算法求最短路径(附完整源码)

    C++floyd warshall算法求最短路径 floyd warshall算法求最短路径的完整源码(定义,实现,main函数测试) floyd warshall算法求最短路径的完整源码(定义,实现 ...

  2. Floyd Warshall算法

    Description: 描述: This is a very popular interview problem to find all pair shortest paths in any gra ...

  3. 最短路径之Floyd(弗洛伊德)算法,以及显示完整路径

    简介: Floyd算法又称为插点法,是一种利用动态规划的思想寻找给定的加权图中多源点之间最短路径的算法,与Dijkstra算法类似.该算法名称以创始人之一.1978年图灵奖获得者.斯坦福大学计算机科学 ...

  4. 计算完全最短路径的Floyd算法

    [计算完全最短路径的Floyd算法] (一).定义** Floyd–Warshall(简称Floyd算法)是一种著名的解决任意两点间的最短路径(All Paris Shortest Paths,APS ...

  5. 图的所有顶点间的最短路径(Floyd算法)

    问题描述 对每一对顶点vi ≠ vj,求出vi与vj之间的最短路径和最短路径长度 Floyd算法 Floyd(Floyd-Warshall)算法又称为插点法,是一种利用动态规划的思想寻找给定的加权图中 ...

  6. 七、最短路径——弗洛伊德(Floyd)算法

    为了能讲明白弗洛伊德(Floyd)算法的精妙所在,我们先来看最简单的案例.下图是一个最简单的3个顶点连通网图. 我们先定义两个二维数组D[3][3]和P[3][3],D代表顶点到顶点的最短路径权值和的 ...

  7. 最短路径问题---Floyd算法详解

    前言 Genius only means hard-working all one's life. Name:Willam Time:2017/3/8 1.最短路径问题介绍 问题解释: 从图中的某个顶 ...

  8. 浅谈Warshall算法

    Warshall算法 ​ 今天的离散数学课后作业里有需要求传递闭包的题目,不懂上课没听,本来想用matlab偷一下懒,但是搜到了Warshall算法,故参考百科及其它博客后写水篇博客. 传递性 ​ 了 ...

  9. 【算法】弗洛伊德(Floyd)算法

    这个算法主要要弄懂三个循环的顺序关系. 弗洛伊德(Floyd)算法过程: 1.用D[v][w]记录每一对顶点的最短距离. 2.依次扫描每一个点,并以其为基点再遍历所有每一对顶点D[][]的值,看看是否 ...

  10. 最短路径问题:Dijkstra算法详解

    前言  Nobody can go back and start a new beginning,but anyone can start today and make a new ending.  ...

最新文章

  1. a按钮居中显示 bootstrap_Excel合并后居中,跨越合并,及跨列居中的区别你都知道吗...
  2. 互联网金融如何助力实体经济?
  3. NHibernate中,查询SqlServer数据库多个实体对象
  4. dxp计算机术语,《计算机DXP应用》.doc
  5. CTFshow php特性 web123
  6. C++11标准出现后,函数指针写法汇总
  7. Android下实现GPS定位服务
  8. RepBaseRepeatMaskerEdition下载 | RepeatMasker
  9. 一.oracle的SQL中group by使用的情况(与聚合函数的关系)
  10. odoo pivot中去掉求和_JDK 7 中的 Fork/Join 模式
  11. 关于null对象使用print方法打印问题总结,null+123打印结果是null123还是123?
  12. ubuntu安装ulipad
  13. Pandas数据分析3-统计、可视化、创建数据框、时间序列、删除数据
  14. java毕业设计仓库管理系统Mybatis+系统+数据库+调试部署
  15. (干货,建议收藏)备战2021年软考中级网络工程师-02操作系统
  16. MMORPG游戏优化报告
  17. aardio - 伪装进程测试
  18. safair下html换行产生的间距设置font-size:0无效
  19. 大师如何炼成 罗杰斯“不从众”的成功之道
  20. 数论-FTT 和 NTT

热门文章

  1. 数据库分区、分表、分库
  2. ThreadLocal与WeakReference
  3. 跪了!!BATJ各位大佬联合教你Java进行Appium自动化测试的实现
  4. 锚点定位在bootstrap下不起作用
  5. AtCoder Regular Contest 113 简单题解(AC了 A~C,缺 D~F)剩下的后面几天补一下
  6. 程序员门槛降低,不用代码编程,免代码平台式开发逐渐火爆
  7. Linux系统中mv命令的作用是什么?
  8. python中利用opencv简单做图片比对
  9. 设计模式:适配器模式
  10. 嵌入式关键技术分析与开发应用