图论之最短路02-2——改进的任意两点间最短距离及路径

========================================================

重要程度 *****

求任意两点间最短距离及其路径。(万能最短路)

输入:权值矩阵,起点,终点

输出:最短距离矩阵,指定起讫点路径(经过的顶点编号)

========================================================

function renyizuiduanlu(W)

clc

disp(‘                           最短路问题‘);

disp(‘===========================================================‘);

disp(‘  说明:本程序用于求任意两点间最短距离及其路径‘);

disp(‘  输入3组数据:权值矩阵,起点,终点.其中权值矩阵需提前编辑完成‘);

disp(‘===========================================================‘);

W

qidian=input(‘输入起点:‘);

zhongdian=input(‘输入终点:‘);

n=length(W);

D=W;

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(qidian,zhongdian);

P1=zeros(1,n);

k=1;

P1(k)=zhongdian;

V=ones(1,n)*inf;

kk=zhongdian;

while kk~=qidian;

for i=1:n

V(1,i)=D(qidian,kk)-W(i,kk);

if V(1,i)==D(qidian,i)

P1(k+1)=i;

kk=i;

k=k+1;

end

end

end

k=1;

wrow=find(P1~=0);

for j=length(wrow):(-1):1

P(k)=P1(wrow(j));

k=k+1;

end

P

d

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

%评:改进后可以任意定义并从界面输入起讫点,更加符合实际需要。

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

例:求下图中点1到8的最短距离和路径。

解:(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)带入程序

renyizuiduanlu(quanzhijuzhen)

最短路问题

===========================================================

说明:本程序用于求任意两点间最短距离及其路径

输入3组数据:权值矩阵,起点,终点.其中权值矩阵需提前编辑完成

===========================================================

W =

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

输入起点:1

输入终点:8

P =

1     2     5     8

d =

11

说明:最短路径为1->2->5->8,最短距离11.

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

时间: 2024-10-11 23:59:54

图论之最短路02-2——改进的任意两点间最短距离及路径的相关文章

图论之最短路02-1——任意两点间最短距离及路径

======================================================== 求任意两点间最短距离及其路径.(万能最短路) 输入:权值矩阵,起点,终点 输出:最短距离矩阵,指定起讫点路径(经过的顶点编号) 为任意一点到其他点最短路奠定基础 ======================================================== function [P d]=liangdianzuiduanlu(W,qidian,zhongdian) W

图论03—随意两点间最短距离及路径(改进)

======================================================== 重要程度 ***** 求随意两点间最短距离及其路径.(万能最短路) 输入:权值矩阵,起点,终点 输出:最短距离矩阵.指定起讫点路径(经过的顶点编号) ======================================================== function renyizuiduanlu(W) clc disp('                        

Floyd-Warshall算法(求解任意两点间的最短路) 详解 + 变形 之 poj 2253 Frogger

/* 好久没有做有关图论的题了,复习一下. --------------------------------------------------------- 任意两点间的最短路(Floyd-Warshall算法) 动态规划: dp[k][i][j] := 节点i可以通过编号1,2...k的节点到达j节点的最短路径. 使用1,2...k的节点,可以分为以下两种情况来讨论: (1)i到j的最短路正好经过节点k一次 dp[k-1][i][k] + dp[k-1][k][j] (2)i到j的最短路完全

任意两点间的最短路 Floyd及其本质

我们知道在已知起点的情况下,求到其他任何一点的最短路是用dijkstra,那么在一个有向图中,我们想知道任意两点之间的最短路,我们就可以使用floyd,而且这个算法表面看起来非常的简单,就是一个三重循环,如果这个图有N个点,那么复杂度为O(|N|3),代码如下. 1 for(int k=0;k<n;k++) 2 for(int i=0;i<n;i++) 3 for(int j=0;j<n;j++) 4 d[i][j]=min(d[i][j],d[i][k]+d[k][j]); 在复杂度这

AOJ -0189 Convenient Location (任意两点间的最短路)

http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=78207 看懂题就好. 求某一办公室到其他办公室的最短距离. 多组输入,n表示n条关系,下面n次每次输入 x y d表示x到y的距离是d. 输出办公室的编号和距离. 因为 顶点数小于10,直接floyed求出所有距离之后,枚举出最短距离即可. 1 /* *********************************************** 2 Author : zch

图论之最短路03——任意指定点到所有其它点的最短路径及距离

======================================================== 重要程度 ***** 求任意点到其它点间最短距离及其路径. 输入:权值矩阵,起点 输出如下: 点i->点j 路径  ¥¥¥ 距离  ¥¥¥ 说明:必须调用E:\matlab M文件\liangdianzuiduanlu.m,请查看网址: http://blog.csdn.net/lzx19901012/article/details/47832213<图论之最 短路02-1--任意

第三关 ——图论:最短路

14:52:09 今天天气好晴朗,处处好风光. 阳光犹如希望,我即将要回去打游戏的希望,希望那么那么大,那么那么刺眼!!! 好的,接下来为您播报考试后续情况:不算太差,还看得过去,至少,应该能活着把年过过去.接下来,就介绍一下在父母看到成绩后想要打你时如何通过最短路逃跑 目录 Dijkstra算法 Bellman-Ford算法 SPFA算法 Floyd算法 首先,要来简单论述一下“最短路”这个问题.要求最短路,无论什么方法,都要先存图. 百“路”图为先 那么,图分为两种,有向图与无向图.无论是有

图论算法----最短路

经典算法 单源最短路: 1.Bellman_ford(可判负环,可有负边) d[i]表示起点S到i的最短路,那么d[i]=min{d[j]+w[j][i]}且存在j->i的边代价为w[j][i] 经过证明如果不存在负圈最多通过V-1次松弛就可以完成复杂度O(V*E)(V为结点数,E为边数) 1 #include <iostream> 2 #include <cstdio> 3 #include <cstring> 4 #include <set> 5

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

%======================================================== %最短路矩阵算法,FLOYD算法 %针对性:方案预算,能求出所有点之间的最短路(最小费用等) %======================================================== function D=zuiduanjulijuzhen(quanzhijuzhen) n=length(quanzhijuzhen); D=quanzhijuzhen; m