- 在线时间
- 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程序,但是只能输出某个点到最短通路的值,以及标号顶点顺序,以及标号顶点索引。# v' }8 e) J/ u; c5 f2 a% |1 Q
: z3 V/ a0 P h2 b/ R) K& d
* u1 |% n) J4 @0 }7 |我想知道有没有什么程序能够输出具体的最短路径,比如说从1到5的最短路径是1->3->4->5,就是类似这样的,有没有这样的dijkstra程度啊。 如果没有的话,那通过现有的是不是能推出来呢?望高人指点啊~小弟感激不尽。
6 p7 y S/ l8 E: j: G6 F6 E
5 p# [+ o; H/ P+ \0 S" G- {, U对了,我还想问最短路径生成树是什么东西??
/ t" R6 ]/ h' x, y2 [9 D; I3 l
( N- Q# A! t8 k/ n' E- W附程序如下:. r, {) ?6 [" ?( F& W! `+ i& |# g, @; T
clear;
( F" V- h. x& W1 k6 X7 A8 lclc;
( N: G( \0 [! \3 j1 V" dM=10000;5 e8 h" }! Z: [( X
a(1,:)=[0,50,M,40,25,10];' E2 b2 {3 O# ^+ B+ [
a(2,:)=[zeros(1,2),15,20,M,25];) A. G( B: K9 \$ d6 O
a(3,:)=[zeros(1,3),10,20,M];
' g( x2 M5 }/ L7 b/ a7 Va(4,:)=[zeros(1,4),10,25];
, V* z1 ?% W8 x3 {a(5,:)=[zeros(1,5),55];
3 _( T' D8 j8 W- H0 za(6,:)=zeros(1,6);( k. N: p3 ]& X3 o- ^! G. R
a=a+a';
: |% ?( E/ W+ \( i1 Y. z: X: Ypb(1:length(a))=0;pb(1)=1;index1=1;index2=ones(1,length(a));
+ D" E& B3 l) G F; x5 Dd(1:length(a))=M;d(1)=0;temp=1;% _; i# a4 T$ @& M4 p( H2 ?! o3 O
while sum(pb)<length(a)) N" e0 u6 l! U* n) X4 H9 c
tb=find(pb==0);
8 }. g( I3 t7 i# D: x$ S d(tb)=min(d(tb),d(temp)+a(temp,tb));
, `* R* B# O2 j! Y tmpb=find(d(tb)==min(d(tb)));( v+ n+ T. k; z) x
temp=tb(tmpb(1));
1 F, p* `% M: }: x: k' g pb(temp)=1;
' ^ U) k8 Q, }# ^0 H$ ? index1=[index1,temp];0 V) `3 X% O1 q- b2 ^, F( }& p
index=index1(find(d(index1)==d(temp)-a(temp,index1)));
- k. `2 C4 d% W5 @( j if length(index)>=2
0 Y1 p4 j/ i ]6 ] index=index(1);
P) m9 M) n( S$ o- e+ T end
& R5 J2 t! {* }# `' q& d" A9 ?$ ^+ C index2(temp)=index;
" X+ Z2 s6 R0 b: ]end2 d, A" l# \% y7 {- [1 t
d, index1, index2
6 [" ]) B, k" i* Y! m5 m* E |
zan
|