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

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

重要程度 *****

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

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

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

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

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-03 00:40:53

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

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

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

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

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

任意两点间最短距离floyd-warshall ---- POJ 2139 Six Degrees of Cowvin Bacon

floyd-warshall算法 通过dp思想 求任意两点之间最短距离 重复利用数组实现方式dist[i][j] i - j的最短距离 for(int k = 1; k <= N; k++) for (int i = 1; i <= N; i++) for (int j = 1; j <= N; j++) dist[i][j] = min(dist[i][j], dist[i][k]+dist[k][j]); 非常好实现 O(V^3) 这里贴一道刚好用到的题 http://poj.org

任意两点间最短路问题及路径还原

1Floyd-Warshall算法 考虑用动态规划的方法,只使用顶点0~k和i,j的情况下,记i到j的最短路径为d[k][i][j].当k=0时,只考虑i和j,即d[0][i][j]=cost[i][j].然后我们就开始讨论从k到k+1是怎样变化的. 对于顶点0~k的i到j的最短路,如果这条路径不经过第k个顶点,那么d[k][i][j]=d[k-1][i][j].当经过第k个顶点时,d[k][i][j]=d[k-1][i][k]+d[k-1][k][j](分成两短),这样总的递推式即为d[k][

寻找两点间的最短距离

由于项目的需要,需要作出计算两点间的最短行走路径的算法  来来回回弄了几天  总算做出来了 参考:http://www.cnblogs.com/hanchan/archive/2009/09/23/1572509.html using UnityEngine; using System.Collections; using System.Collections.Generic; public class DijkstraDouble : MonoBehaviour { // Use this f

两点间所有路径的遍历算法

转自:http://blog.sina.com.cn/s/blog_5ff8e88e01013lot.html 这几天,用到了这个功能,但在网上找到了一份资料,思路写的很清晰,但代码有错误.因此,我就按着这个思路,自己整理了代码,现在说明如下:(引用前部分思想,更新后部分代码) 两点间所有路径的遍历算法 中国海洋大学 信息科学与工程学院 熊建设 梁磊 摘要:本文首先简单介绍图的深度优先遍历算法,接着根据图的深度优先遍历算法求出连通图中两点间所有路径,并给出代码. 关键词:图.深度优先遍历.算法

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的最短路完全

dfs 无向图两节点间的所有路径

标题:风险度量 X星系的的防卫体系包含 n 个空间站.这 n 个空间站间有 m 条通信链路,构成通信网.两个空间站间可能直接通信,也可能通过其它空间站中转. 对于两个站点x和y (x != y), 如果能找到一个站点z,使得:当z被破坏后,x和y无法通信,则称z为关于x,y的关键站点. 显然,对于给定的两个站点,关于它们的关键点的个数越多,通信风险越大. 你的任务是:已知网络结构,求两站点之间的通信风险度,即:它们之间的关键点的个数. 输入数据第一行包含2个整数n(2 <= n <= 1000

基于pgrouting的任意两点间的最短路径查询函数

前面文章介绍了如何利用postgresql创建空间数据库,建立空间索引和进行路径规划.但是在真实的场景中用户进行路径规划的时候都是基于经纬度数据进行路径规划的,因为用户根本不会知道道路上节点的ID.因此文本讲述如何查询任意两点间的最短路径. 一.定义函数名及函数参数 函数名定义为: pgr_fromAtoB 参数设置分别为: 输入为数据库表名,起点和终点的经纬度坐标 输出为:路段序号,gid号,道路名,消耗及道路集合体. IN tbl varchar, --数据库表名 IN x1 double