「算法」最短路径—Floyd弗洛伊德算法

「算法」最短路径—Floyd弗洛伊德算法是否大于e[i][1]+e[1][j],如果大于,则使e[i][j]=e[i][1]+e[1][j]我们对每个点都扫描一遍。

欢迎大家来到IT世界,在知识的湖畔探索吧!

多源最短路径:两点之间的最短路径。

「算法」最短路径—Floyd弗洛伊德算法

二维矩阵,存放地点之间距离。

「算法」最短路径—Floyd弗洛伊德算法

从4—>3,如果经过1的话,路径是11,比12短。e[4][3]>e[4][1]+e[1][3]

所以我们可以假设,如果两点间只允许经过1,那么最短路径应该如何计算?

判断e[i][j]是否大于e[i][1]+e[1][j],如果大于,则使e[i][j]=e[i][1]+e[1][j]

我们对每个点都扫描一遍。(默认定义无穷为9999,通常设为99999999)

for(i=1;i<=n;i++)
{
 for(j=1;j<=n;j++)
 {
 if(e[i][1]<9999 && e[1][j]<9999 && e[i][j]>e[i][1]+e[1][j])
 e[i][j]=e[i][1]+e[1][j];
 }
}

欢迎大家来到IT世界,在知识的湖畔探索吧!

扫描完必经过1的,就该继续扫描必经过2的。

欢迎大家来到IT世界,在知识的湖畔探索吧!for(i=1;i<=n;i++)
{
 for(j=1;j<=n;j++)
 {
 if(e[i][2]<9999 && e[2][j]<9999 && e[i][j]>e[i][2]+e[2][j])
 e[i][j]=e[i][2]+e[2][j];
 }
}

所以我们整理一下:

for(k=1;k<=n;k++)
 for(i=1;i<=n;i++)
 for(j=1;j<=n;j++)
 if(e[i][k]<9999 && e[k][j]<9999 && e[i][j]>e[i][k]+e[k][j])
 e[i][j]=e[i][k]+e[k][j];

输出最短路径:

欢迎大家来到IT世界,在知识的湖畔探索吧!printf("%d",e[i][j]);
「算法」最短路径—Floyd弗洛伊德算法

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://itzsg.com/34461.html

(0)

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

联系我们YX

mu99908888

在线咨询: 微信交谈

邮件:itzsgw@126.com

工作时间:时刻准备着!

关注微信