- 在线时间
- 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程序,但是只能输出某个点到最短通路的值,以及标号顶点顺序,以及标号顶点索引。
6 \ i1 b* t# z
3 l/ D3 p5 f G- R* j/ F1 N+ j, O7 M. [4 }7 t
我想知道有没有什么程序能够输出具体的最短路径,比如说从1到5的最短路径是1->3->4->5,就是类似这样的,有没有这样的dijkstra程度啊。 如果没有的话,那通过现有的是不是能推出来呢?望高人指点啊~小弟感激不尽。
4 t& A! W/ S( r7 \, `% ?
! f6 N/ F8 d( T$ d( U5 N对了,我还想问最短路径生成树是什么东西??; v- G4 r% H4 C# e; A
# M, H- v! z. R) f/ o: J& v
附程序如下:% g& s% o Q3 K
clear;8 K3 l! R: `5 w
clc;
/ W$ J) C" G$ R' \ YM=10000;
2 K' U, u3 H9 M" Sa(1,:)=[0,50,M,40,25,10];/ A/ t# w8 ^" {+ m1 p. I, z2 B
a(2,:)=[zeros(1,2),15,20,M,25];
" g! S8 O( v7 f9 Va(3,:)=[zeros(1,3),10,20,M];
' ]" s+ L( w4 U1 F; y' Q- Ua(4,:)=[zeros(1,4),10,25];" N& z5 A& T% D" C
a(5,:)=[zeros(1,5),55];
+ m, \- [0 X( M+ I% ra(6,:)=zeros(1,6);2 J( M8 E, Y |& x& `7 U; z
a=a+a';' a- z( J8 A: v
pb(1:length(a))=0;pb(1)=1;index1=1;index2=ones(1,length(a));
; A1 m. f* \8 J' j% i+ Gd(1:length(a))=M;d(1)=0;temp=1;0 y$ k' S$ p5 V) z4 e
while sum(pb)<length(a)4 q" l1 o/ D/ O) Q! d' T5 G7 {
tb=find(pb==0);9 T+ `0 t/ \' \/ e5 O; e* K
d(tb)=min(d(tb),d(temp)+a(temp,tb));8 c9 J7 a: X7 L1 g3 ~0 V! v6 \
tmpb=find(d(tb)==min(d(tb)));. z+ B- o7 g. m/ |/ a
temp=tb(tmpb(1));6 B5 C7 Q6 a8 t1 M
pb(temp)=1;
( y! U; k- j- b7 v index1=[index1,temp];
/ p; d* O8 g# ~1 q; Y4 B& r index=index1(find(d(index1)==d(temp)-a(temp,index1)));
% ^8 |, A% `' F if length(index)>=28 z0 O! L& T5 M
index=index(1);
; ~" N. L8 w1 m5 V3 b D end6 l) b* h8 y3 u. X9 Z: [
index2(temp)=index;
* `* ?! D4 l" S' c( N3 [+ Lend/ ]" D- s8 l* K: F- S; e
d, index1, index2 % J9 B# C! N" Q
|
zan
|