floyd算法Floyd算法是什么?
floyd算法 时间:2021-06-19 阅读:(
)
求最短路径算法有哪几种?
原发布者:萨sky
简述几种常用的最短路径算法摘要:随着社会的发展,最短路径问题在现实生活中占据的地位越来越重要。
求解这一类问题的方法有很多,包括Floyd算法、Dijkstra算法、Bellman-Ford算法、动态规划算法和智能优化算法。
其中较为常用的是Floyd算法、Dijkstra算法和Bellman-Ford算法。
本文将简单介绍这三种最短路径算法,通过比较各种方法的优劣使对其有更进一步的认识和学习。
关键字:最短路径;最短路径算法;Floyd算法;Dijkstra算法;Bellman-Ford算法随着计算机科学的发展,人们生产生活效率要求的提高,最短路径问题逐渐成为计算机科学、运筹学、地理信息科学等学科的一个研究热点。
也正因为最短路径问题在实际生产生活中应用广泛,优化该算法和提高算法的求解效率具有重大的现实意义。
1.最短路径概述最短路径问题是指在一个赋权图的两个节点之间找出一条具有最小权的路径,这是图论的描述,也是图论中研究的一个重要问题。
现实生活中我们可以看到这些最短路径问题的例子,公交车辆的最优行驶路线和旅游线路的选择等;军事领域中也有应用,作战部队的行军路线等问题就与寻找一个图的最短路径密切相关,因此对最短路径问题的深入研究和广泛应用具有重要意义和实用价值。
在线路优化问题中,如果优化指标与路程的相关性较强,而和其他因素相关性较弱时,即以最短路程为准则,则考虑转化为最短路径问题。
比如军事行军线路选取时,假如从出发地到目的地之间有多种线路可以选取,危用Floyd算法求有向网G中各对顶点之间的最短路径
#define MAX_NAME 5 // 顶点字符串的最大长度+1
#define MAX_INFO 20 // 相关信息字符串的最大长度+1
typedef int VRType;
typedef char VertexType[MAX_NAME];
typedef char InfoType;
#include"c1.h"
#include"c7-1.h"
#include"bo7-1.cpp"
typedef int PathMatrix[MAX_VERTEX_NUM][MAX_VERTEX_NUM][MAX_VERTEX_NUM];
typedef int DistancMatrix[MAX_VERTEX_NUM][MAX_VERTEX_NUM]; void ShortestPath_FLOYD(MGraph G,PathMatrix &P,DistancMatrix &D)
{ // 用Floyd算法求有向网G中各对顶点v和w之间的最短路径P[v][w]及其
// 带权长度D[v][w]。
若P[v][w][u]为TRUE,则u是从v到w当前求得最短
// 路径上的顶点。
int u,v,w,i;
for(v=0;v<G.vexnum;v++) // 各对结点之间初始已知路径及距离
for(w=0;w<G.vexnum;w++)
{
D[v][w]=G.arcs[v][w].adj;
for(u=0;u<G.vexnum;u++)
P[v][w][u]=FALSE;
if(D[v][w]<INFINITY) // 从v到w有直接路径
{
P[v][w][v]=TRUE;
P[v][w][w]=TRUE;
}
}
for(u=0;u<G.vexnum;u++)
for(v=0;v<G.vexnum;v++)
for(w=0;w<G.vexnum;w++)
if(D[v][u]+D[u][w]<D[v][w]) // 从v经u到w的一条路径更短
{
D[v][w]=D[v][u]+D[u][w];
for(i=0;i<G.vexnum;i++)
P[v][w][i]=P[v][u][i]||P[u][w][i];
}
} void main()
{
MGraph g;
int i,j,k,l,m,n;
PathMatrix p;
DistancMatrix d;
CreateDN(g);
for(i=0;i<g.vexnum;i++)
g.arcs[i][i].adj=0; // ShortestPath_FLOYD()要求对角元素值为0
printf("邻接矩阵:
");
for(i=0;i<g.vexnum;i++)
{
for(j=0;j<g.vexnum;j++)
printf("%11d",g.arcs[i][j]);
printf("
");
}
ShortestPath_FLOYD(g,p,d);
printf("d矩阵:
");
for(i=0;i<g.vexnum;i++)
{
for(j=0;j<g.vexnum;j++)
printf("%6d",d[i][j]);
printf("
");
}
for(i=0;i<g.vexnum;i++)
for(j=0;j<g.vexnum;j++)
printf("%s到%s的最短距离为%d
",g.vexs[i],g.vexs[j],d[i][j]);
printf("p矩阵:
");
l=strlen(g.vexs[0]); // 顶点向量字符串的长度
for(i=0;i<g.vexnum;i++)
{
for(j=0;j<g.vexnum;j++)
{
if(i!=j)
{
m=0; // 占位空格
for(k=0;k<g.vexnum;k++)
if(p[i][j][k]==1)
printf("%s",g.vexs[k]);
else
m++;
for(n=0;n<m*l;n++) // 输出占位空格
printf(" ");
}
else
for(k=0;k<g.vexnum*l;k++) // 输出占位空格
printf(" ");
printf(" "); // 输出矩阵元素之间的间距
}
printf("
");
}
}Floyd算法是什么?
Floyd算法又称为弗洛伊德算法,插点法,是一种用于寻找给定的加权图中顶点间最短路径的算法。
通过一个图的权值矩阵求出它的每两点间的最短路径矩阵。
从图的带权邻接矩阵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来记录两点间的最短路径。
采用的是(松弛技术),对在i和j之间的所有其他点进行一次松弛。
所以时间复杂度为O(n^3); 其状态转移方程如下: map[i,j]:=min{map[i,k]+map[k,j],map[i,j]} map[i,j]表示i到j的最短距离 K是穷举i,j的断点 map[n,n]初值应该为0,或者按照题目意思来做。
当然,如果这条路没有通的话,还必须特殊处理,比如没有map[i,k]这条路
无忧云怎么样?无忧云服务器好不好?无忧云值不值得购买?无忧云是一家成立于2017年的老牌商家旗下的服务器销售品牌,现由深圳市云上无忧网络科技有限公司运营,是正规持证IDC/ISP/IRCS商家,主要销售国内、中国香港、国外服务器产品,线路有腾讯云国外线路、自营香港CN2线路等,都是中国大陆直连线路,非常适合免备案建站业务需求和各种负载较高的项目,同时国内服务器也有多个BGP以及高防节点...
快云科技: 12.12特惠推出全场VPS 7折购 续费同价 年付仅不到五折公司介绍:快云科技是成立于2020年的新进主机商,持有IDC/ICP等证件资质齐全主营产品有:香港弹性云服务器,美国vps和日本vps,香港物理机,国内高防物理机以及美国日本高防物理机产品特色:全配置均20M带宽,架构采用KVM虚拟化技术,全盘SSD硬盘,RAID10阵列, 国内回程三网CN2 GIA,平均延迟50ms以下。...
棉花云官网棉花云隶属于江西乐网科技有限公司,前身是2014年就运营的2014IDC,专注海外线路已有7年有余,是国内较早从事海外专线的互联网基础服务提供商。公司专注为用户提供低价高性能云计算产品,致力于云计算应用的易用性开发,并引导云计算在国内普及。目前公司研发以及运营云服务基础设施服务平台(IaaS),面向全球客户提供基于云计算的IT解决方案与客户服务(SaaS),拥有丰富的国内BGP、双线高防...
floyd算法为你推荐
身份证系统电子身份证如何办理贸易配额纺织品进出口配额是什么贸易配额进出口配额和关税是什么关系,对进出口贸易有何影响?windowsmediawindows media player 是什么啊短信营销方案有谁实验过短息营销,这个方法好吗?大家可以试试啊!素数算法什么是素数算法avc是什么格式电厂AVC啥意思?netbios协议现在怎么还有用NetBios协议的,这个协议和TCP/IP协议有什么关系,为什么获取网卡的信息还要selectintooracle有select into临时表的用法吗方正证券官方网方正证券同花顺下载/2010同花顺官方网站/同花顺官方网站首页
花生壳免费域名 万网免费域名 krypt 美国主机排名 淘宝抢红包攻略 stablehost 站群服务器 godaddy优惠码 便宜建站 gitcafe 账号泄露 亚洲小于500m 好看qq空间 泉州移动 万网空间购买 联通网站 网页提速 服务器维护 后门 winserver2008r2 更多