- 在线时间
- 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程序,但是只能输出某个点到最短通路的值,以及标号顶点顺序,以及标号顶点索引。
" g! M9 ?8 P! _( X& u# E' M+ V' ^6 J9 Q' ?+ }
, I, V& A3 P2 x, V$ W( w; U! c我想知道有没有什么程序能够输出具体的最短路径,比如说从1到5的最短路径是1->3->4->5,就是类似这样的,有没有这样的dijkstra程度啊。 如果没有的话,那通过现有的是不是能推出来呢?望高人指点啊~小弟感激不尽。
6 K' N2 b$ |, F3 |6 [1 l3 b. l
, i: e2 M3 l+ @0 U7 Y/ ~/ R" T对了,我还想问最短路径生成树是什么东西??1 s: s$ T) i) t* @
" W) A1 p2 Z6 p/ |* [
附程序如下:
( P2 `1 A3 x ]6 gclear;; u2 q0 [; ~5 N' O& c1 J; x
clc;) E! N7 H* w) c" g$ [- F+ K# b$ {2 a
M=10000;* _4 r; { @9 }7 W1 [' T! X0 w5 c
a(1,:)=[0,50,M,40,25,10];
1 ~; W4 W7 k& h7 c1 d fa(2,:)=[zeros(1,2),15,20,M,25];
I5 @ _- p2 l4 a0 P' X+ Wa(3,:)=[zeros(1,3),10,20,M];
2 T8 R) p$ z8 ^" V) va(4,:)=[zeros(1,4),10,25];
- o3 m, L# O( O& Y' i8 g" va(5,:)=[zeros(1,5),55];
# }' S7 n R! s) z# k8 a/ w' xa(6,:)=zeros(1,6);: M; g' U9 c5 z1 {
a=a+a';8 d* R2 e; Q( }+ w9 [# @ e0 A
pb(1:length(a))=0;pb(1)=1;index1=1;index2=ones(1,length(a));# [: Z- v$ I/ x6 |% H0 L- j# G. b4 c
d(1:length(a))=M;d(1)=0;temp=1;8 G/ k- K# |+ c3 \
while sum(pb)<length(a) J2 u) G+ Y. C8 {
tb=find(pb==0);' l t! r: @* R" a
d(tb)=min(d(tb),d(temp)+a(temp,tb));
3 g" j# ^( y+ D F tmpb=find(d(tb)==min(d(tb)));4 w( @5 N6 t* r6 K; n6 K& b7 `% }
temp=tb(tmpb(1));5 p. g, h/ S5 K, {( v) b2 x, r
pb(temp)=1;
% b$ u7 m `+ J4 i& a1 O1 q. E$ j index1=[index1,temp];& i9 W4 E3 E0 I t) F$ j+ j
index=index1(find(d(index1)==d(temp)-a(temp,index1)));5 |) ?8 B7 E% r6 a3 I* d/ s
if length(index)>=2* b4 f; x9 ?' z2 H8 i
index=index(1);* s1 X, A0 T. n7 w
end' x6 g4 n( j) j
index2(temp)=index;$ e+ j3 v; d/ N$ @0 r) E
end+ ~* F% ]' C6 o) l8 C* ^! a3 d8 u
d, index1, index2
4 ~) ?3 b% h) J7 m+ p- f; H |
zan
|