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

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

重要程度 *****

求任意点到其它点间最短距离及其路径。

输入:权值矩阵,起点

输出如下:

点i—>点j

路径  ¥¥¥

距离  ¥¥¥

说明:必须调用E:\matlab M文件\liangdianzuiduanlu.m,请查看网址:

http://blog.csdn.net/lzx19901012/article/details/47832213《图论之最

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

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

function yiduiduozuiduanlu(W)

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

n=size(W,1);

D=zeros(1,n);

for zhongdian=1:n

[p d]=liangdianzuiduanlu(W,qidian,zhongdian);

Pm{zhongdian}=p;

D(zhongdian)=d;

end

clc

fprintf(‘点%d到其他点的路径和最短距离如下:‘,qidian)

for zhongdian=1:n

fprintf(‘\n            点%d->点%d\n‘,qidian,zhongdian)

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

lujing=Pm{zhongdian}

juli=D(zhongdian)

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

end

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

评:类似于C语言中的函数调用,本程序中调用了《liangdianzuiduanlu.m》,

调用时要求两函数位于同一目录下(可自定义)。

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

例:求下图中点3到其他所有点的最短路径及距离(想想消防路径规划时是不是可以用呢?)

解:

(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)带入程序(格式整理后输出如下)

yiduiduozuiduanlu(quanzhijuzhen)

点3到其他点的路径和最短距离如下:

点3->点1

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

lujing =     3     6     5     2     1     1

juli =     7

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

点3->点2

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

lujing =     3     6     5     2     2

juli =     5

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

点3->点3

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

lujing =     3

juli =     0

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

点3->点4

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

lujing =     3     4

juli =     7

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

点3->点5

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

lujing =     3     6     5     5

juli =     4

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

点3->点6

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

lujing =     3     6

juli =     1

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

点3->点7

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

lujing =     3     7

juli =     2

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

点3->点8

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

lujing =     3     7     8

juli =     5

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

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

时间: 2024-10-14 00:06:40

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

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

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

自定义类加载器——加载任意指定目录的class文件

public class MyClassLoader extends ClassLoader{ String path;//自定义类加载器所负责的文件夹 public MyClassLoader(String path) { super(); this.path = path; } @SuppressWarnings("deprecation") @Override protected Class<?> findClass(String name) throws Class

如何利用jquery在任意指定li元素后面插入新的li元素

如何利用jquery在任意指定li元素后面插入新的li元素:本章节介绍要一下如何利用jquery实现将一个新的li元素插入到任意li元素的后面.原生的javascript可以使用insertBefore()函数,具体可以参阅javascript的insertBefore.insertAfter和appendChild简单介绍一章节.下面介绍一下如何利用jquery实现此功能.代码实例: <!DOCTYPE html><html><head> <meta chars

Dijkstra算法——计算一个点到其他所有点的最短路径的算法

迪杰斯特拉算法百度百科定义:传送门 迪杰斯特拉算法用来计算一个点到其他所有点的最短路径,是一种时间复杂度相对比较优秀的算法 O(n2)(相对于Floyd算法来说) 是一种单源最短路径算法,但是它并不能处理负边权的情况 板子代码: #include<cstdio> #include<iostream> #include<cstdlib> #include<iomanip> #include<cmath> #include<cstring>

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

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

第三关 ——图论:最短路

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

图论-第k短路

A* 做法 \(f(p)=g(p)+h(p)\) , \(f(p)\) 作为优先队列比较函数用来比较的值, \(g(p)\) 是当前路径到 \(p\) 的距离, \(h(p)\) 是 \(p\) 点到终点最短路(预处理可以得到). 每个点出队次数 \(k\),就说明当前找到的是到这个点的 \(k\) 短路. 关键代码 void astar(int bg) { int cnt = 0; A.push(ast(bg, 0)); while (!A.empty()) { ast p = A.top()

图论基础——最短路算法集锦

最短路算法有个基础——————松弛操作(在大多数最短路算法都会涉及) if(d[e[i].v]>d[e[i].u]+w[i])//如果这条边的终点到源点的距离大于起点到源点距离,就替换. { d[e[i].v]>d[e[i].u]+w[i]; } 最短路算法一共有多少种方法我不知道,在这里我只想记录4种: •Dijkstra:求单源点最短路(不含负边权) •Bellman-ford:求单源点最短路(可含负边权) •SPFA(使用队列优化后的Bellman-ford) •Floyd:求各点间的最