图论之最短路01——最短路矩阵(FLOYD)算法

%========================================================

%最短路矩阵算法,FLOYD算法

%针对性:方案预算,能求出所有点之间的最短路(最小费用等)

%========================================================

function D=zuiduanjulijuzhen(quanzhijuzhen)

n=length(quanzhijuzhen);

D=quanzhijuzhen;

m=1;

while m<=n

for i=1:n

for j=1:n

if D(i,j)>D(i,m)+D(m,j)

D(i,j)=D(i,m)+D(m,j);

end

end

end

m=m+1;

end

D;

%========================================================

%评价:矩阵最短路算法,可以求所有点对点的最短距离,但有其缺点,

%就是没有给出具体路径,程序中D是最短距离矩阵

%========================================================

例:求下图中各个点之间的最短距离。

解:(1)写权值矩阵

quanzhijuzhen =[   0     2     8     1   Inf   Inf   Inf   Inf

2     0     6   Inf     1   Inf   Inf   Inf

8     6     0     7     5     1     2   Inf

1   Inf     7     0   Inf   Inf     9   Inf

Inf     1     5   Inf     0     3   Inf     8

Inf   Inf     1   Inf     3     0     4     6

Inf   Inf     2     9   Inf     4     0     3

Inf   Inf   Inf   Inf     8     6     3     0]

(2)带入程序

>> D=zuiduanjulijuzhen(quanzhijuzhen)

说明:第1行表示点1与其他点的距离,同理i=2-8行表示i点与其他点的距离。

版权声明:博主文章可以被非商用转载,但请务必注明出处,因水平有限,难免出错,在此免责。

时间: 2024-10-08 00:14:35

图论之最短路01——最短路矩阵(FLOYD)算法的相关文章

HDU 2066 最短路floyd算法+优化

http://acm.hdu.edu.cn/showproblem.php?pid=206 题意 从任意一个邻居家出发 到达任意一个终点的 最小距离 解析 求多源最短路 我想到的是Floyd算法 但是题目给出的n的大小不确定 所以图很稀疏 会有很多孤立点 会多跑很多没用的路径 需要优化一下 不然会超时 我看其他人很多都是用迪杰斯特拉写的,可以试试 AC代码 1 #include <stdio.h> 2 #include <math.h> 3 #include <string.

hdu 3339(最短路+01背包)

In Action Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 5135    Accepted Submission(s): 1710 Problem Description Since 1945, when the first nuclear bomb was exploded by the Manhattan Project t

HDU 3339 In Action【最短路+01背包模板/主要是建模看谁是容量、价值】

 Since 1945, when the first nuclear bomb was exploded by the Manhattan Project team in the US, the number of nuclear weapons have soared across the globe. Nowadays,the crazy boy in FZU named AekdyCoin possesses some nuclear weapons and wanna destroy

$CF1063B\ Labyrinth$ $01$最短路/$01BFS$

\(Des\) 有一个网格图,上面的格子分为空地和障碍,障碍是不可以走的.现在从给定的起点出发开始到处乱走,最多可以往左走\(l\)次,往右走\(r\)次.求可能到达的点数. \(Sol\) 如果只限制了向左或向右走的次数就要简单一些,所以我们先思考这一种情形. 假设只限制了向左走不能超过\(l\)次.这样转化:对于每个点,它向左走花费的代价是\(1\),其他方向的代价是\(0\).求从给定起点出发,走到每一个点的最小花费.对于某一个点,如果这个花费是\(\leq l\)的,那么这个位置就是可达

多源最短路Floyd 算法————matlab实现

弗洛伊德(Floyd)算法是一种用于寻找给定的加权图中顶点间最短路径的算法.该算法名称以创始人之一.1978年图灵奖获得者.斯坦福大学计算机科学系教授罗伯特·弗洛伊德命名. 基本思想 通过Floyd计算图G=(V,E)中各个顶点的最短路径时,需要引入一个矩阵S,矩阵S中的元素a[i][j]表示顶点i(第i个顶点)到顶点j(第j个顶点)的距离. 假设图G中顶点个数为N,则需要对矩阵S进行N次更新.初始时,矩阵S中顶点a[i][j]的距离为顶点i到顶点j的权值:如果i和j不相邻,则a[i][j]=∞

hdu1688(dijkstra求最短路和次短路)

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1688 题意:第k短路,这里要求的是第1短路(即最短路),第2短路(即次短路),以及路径条数,最后如果最短路和次短路长度差1,则输出两种路径条数之和,否则只输出最短路条数. 思路:dijkstra变形,注意状态的转移,代码上附了注释,就不多说了.. 代码: 1 #include <bits/stdc++.h> 2 #define MAXN 1010 3 using namespace std; 4

HDU 2544:最短路( 最短路径入门 &amp;&amp;Dijkstra &amp;&amp; floyd )

最短路 Time Limit: 5000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 30972    Accepted Submission(s): 13345 Problem Description 在每年的校赛里,所有进入决赛的同学都会获得一件很漂亮的t-shirt.但是每当我们的工作人员把上百件的衣服从商店运回到赛场的时候,却是非常累的!所以现在他们想要寻找

hdu 1688 Sightseeing【最短路,次短路条数】

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1688 题意:求最短路和次短路条数如果次短路长度=最短路长度+1 这输出次短路条数+最短路条数,否则输出最短路条数 分析:这是到模版题,献上模版: #include<stdio.h> #include<string.h> #include<algorithm> #include<iostream> #include<queue> #include<

最短路 spfa, dijkstra, Floyd

spfa 1 #include <stdio.h> 2 #include <queue> 3 using namespace std; 4 5 #define RANGE 101 6 #define MAX 0x3f3f3f3f 7 int cost[RANGE][RANGE]; 8 int d[RANGE]; 9 bool used[RANGE]; 10 int n,m; 11 12 void spfa( int s ) 13 { 14 int i,now; 15 // 初始化