- 在线时间
- 30 小时
- 最后登录
- 2014-2-8
- 注册时间
- 2012-11-24
- 听众数
- 7
- 收听数
- 0
- 能力
- 0 分
- 体力
- 334 点
- 威望
- 0 点
- 阅读权限
- 30
- 积分
- 140
- 相册
- 0
- 日志
- 0
- 记录
- 0
- 帖子
- 94
- 主题
- 6
- 精华
- 0
- 分享
- 0
- 好友
- 18
升级   20% TA的每日心情 | 郁闷 2014-2-7 13:28 |
|---|
签到天数: 47 天 [LV.5]常住居民I
- 自我介绍
- 好好学习,天天向上。
 |
我手头有一个现成的dijkstra算法的matlab程序,但是只能输出某个点到最短通路的值,以及标号顶点顺序,以及标号顶点索引。
- y# u) j8 ?) Y% l, {- H; ?6 g) Z! [7 d2 Y: f7 M8 H$ F: G
( r! g5 T# i3 U- F& @% O m' h6 \
我想知道有没有什么程序能够输出具体的最短路径,比如说从1到5的最短路径是1->3->4->5,就是类似这样的,有没有这样的dijkstra程度啊。 如果没有的话,那通过现有的是不是能推出来呢?望高人指点啊~小弟感激不尽。, L7 _7 m: [1 {0 d
# ^% v/ ~% ]3 o4 _7 j$ H
对了,我还想问最短路径生成树是什么东西??3 }: E4 c7 l' M( F) g. V
: B. Y; F; }! n9 C3 v ^
附程序如下:& [* x$ v- c0 L9 Q' t9 _
clear;: U' q, {0 v& u# s* U
clc;
6 l3 l3 G0 {( k' q2 I- `6 nM=10000;" P. M9 D1 U" X$ \8 {. o3 N
a(1,:)=[0,50,M,40,25,10];
! ]+ ?" x1 h- c7 r1 Qa(2,:)=[zeros(1,2),15,20,M,25];0 `* Q! K+ C; [/ Y6 _
a(3,:)=[zeros(1,3),10,20,M];) Q- {0 j z" Q2 [4 U8 i
a(4,:)=[zeros(1,4),10,25];
" F7 o8 r( I" L/ z' J1 O4 j/ J7 [a(5,:)=[zeros(1,5),55];
5 D: v8 `5 k. {% O% R$ @5 d+ Z3 Ia(6,:)=zeros(1,6);' P, f: x3 Z* [# J/ ]( X& p
a=a+a';
( I) Q6 S; C0 |$ \pb(1:length(a))=0;pb(1)=1;index1=1;index2=ones(1,length(a));
! {% X% c) W4 u& X, j# pd(1:length(a))=M;d(1)=0;temp=1;. `6 \8 `# }0 P) |! _- Z
while sum(pb)<length(a)5 i+ u0 c5 ^* P% W' f
tb=find(pb==0);: ?% m6 K. H9 C2 ^( v+ T3 _& M1 X9 \( l
d(tb)=min(d(tb),d(temp)+a(temp,tb));/ U( [) p& D1 N; B" d7 r) ^5 ^1 D' n
tmpb=find(d(tb)==min(d(tb)));
& X0 K; ~; F9 ~+ k/ c) ~ temp=tb(tmpb(1));1 b1 B% M; g" n
pb(temp)=1;3 r0 \- l9 P& Q6 e% S
index1=[index1,temp];
" k4 W7 V1 H, |; f1 i, J index=index1(find(d(index1)==d(temp)-a(temp,index1)));
) [: F' o9 c( t* A" s% |! ^ if length(index)>=2! R4 Z5 F W# P3 j0 j. k
index=index(1);4 A* e3 I% H4 t
end
+ M3 K; [, z2 _6 j6 { index2(temp)=index;
* n" }5 x2 G3 Y* @end
2 e4 m$ p) v; m' W& Z& hd, index1, index2
( Y! |2 N4 d# k9 ^ |
zan
|