- 在线时间
- 120 小时
- 最后登录
- 2015-5-2
- 注册时间
- 2012-8-6
- 听众数
- 10
- 收听数
- 0
- 能力
- 0 分
- 体力
- 1305 点
- 威望
- 0 点
- 阅读权限
- 40
- 积分
- 562
- 相册
- 1
- 日志
- 1
- 记录
- 1
- 帖子
- 340
- 主题
- 26
- 精华
- 0
- 分享
- 0
- 好友
- 37
升级   87.33% TA的每日心情 | 开心 2015-5-2 15:22 |
---|
签到天数: 174 天 [LV.7]常住居民III
- 自我介绍
- 自信
群组: 学术交流B 群组: 学术交流A |
这是用MATLAB做的
% 两点间最短路的 Dijkstra 算法
function [d index1 index2] = Dijkf(a)
% a表示图的权值矩阵
% b表示所有最短路的权和
% index1表示标号顶点顺序
% index2表示标号顶点索引
% 参数初始化
M = max(max(a));
pb(1:length(a)) = 0;
pb(1) = 1;
index1 = 1;
index2 = ones(1,length(a));
d(1:length(a)) = M;d(1) = 0;temp = 1;
% 更新l(v),同时记录顶点顺序和顶点索引
while sum(pb) < length(a)
tb = find(pb == 0);
d(tb) = min(d(tb),d(temp)+a(temp,tb));
tmpb = find(d(tb) == min(d(tb)));
temp = tb(tmpb(1));
pb(temp) = 1;
index1 = [index1,temp]; % 记录标号顺序
index = index1(find(d(index1) == d(temp) a(temp,index1)));
if length(index) >= 2
index = index(1);
end
index2(temp) = index; % 记录标号索引
end
d;
index1;
index2; |
|