Matalab代码 实现 Dijkstra求 有向图及无向图之间,任意两点之间的最短路径
2015-07-22 15:33
831 查看
<span style="font-family: Arial, Helvetica, sans-serif;">%% Dijkstra </span>
function minWeightMatrix=shortestPath(G,nodeNum) minWeightMatrix=zeros(nodeNum,nodeNum); for i=1:nodeNum %获取每个顶点到其它节点最短路径权值,Dijkstra 源点遍历 D=G(i,:); %初始化节点到各个邻居节点的权值 D(D==0)=inf; tag=zeros(1,nodeNum); %0 为对应位置节点未求出最大路径 tag(i)=1; while sum(tag,2)~=nodeNum noTag=find(tag==0); %还未获得最短距离的节点 minValue=min(D(noTag)); if minValue~=inf tempIndex=find(D==minValue); %找出候选节点,更新值 tag(tempIndex)=1; % 将候选节点去掉 for candidateNode=1:length(tempIndex) noTag(noTag==tempIndex(candidateNode))=[]; end % 修改源点到各个未标记的顶点间的距离 for j=1:length(noTag) %对所有未获得最短距离的节点进行更新 minTemp=D(noTag(j)); for k=1:length(tempIndex) if minTemp>(minValue+G(tempIndex(k),noTag(j)))&&G(tempIndex(k),noTag(j))~=0 minTemp=minValue+G(tempIndex(k),noTag(j)); end end D(noTag(j))=minTemp; end else break; end end minWeightMatrix(i,:)=D; end minWeightMatrix(isinf(minWeightMatrix))=0; minWeightMatrix=minWeightMatrix-diag(diag(minWeightMatrix));
测试数据:
clear;clc; %% 测试数据 %有向图范例 G=[0 0 10 0 30 100;0 0 5 0 0 0;0 0 0 50 0 0;0 0 0 0 0 10;0 0 0 20 0 60;0 0 0 0 0 0]; %% 无向图范例 G=[0 0 10 0 30 100; 0 0 5 0 0 0; 10 5 0 50 0 0; 0 0 50 0 20 10; 30 0 0 20 0 60; 100 0 0 10 60 0]; minPath=shortestPath(G,6); disp('测试完毕');
相关文章推荐
- c++11标准范围for语句的尝试
- 关于java 中的 File.separator
- go语言实现线程池
- 指针参数传递
- QTextStream和QDataStream的区别
- Spring之DBCP连接池注入实例
- C#+Socket客户端断线重连的解决办法
- spring事物管理
- POJ 3268
- java理论之java数组和集合
- C++学习之旅——结构体和联合体的区别,以及数据对齐方式影响内存大小
- Java反射实例 自己用于记录
- 【版本控制】Github for Windows客户端的使用
- python list string tuple 未完待续
- 在Django中使用Sitemap的方法讲解
- PHP
- 17 ways to Optimize VBA Code for FASTER Macros
- Scrapy框架 学习笔记2
- C#操作IIS
- MyEclipse+SSH开发环境配置