两点之间最短路径算法(Single-Dijkstra-shortest path)
2016-05-25 21:35
405 查看
摘要
本文主要讲述最短路径算法,一个主要原因是网上的“基于Matlab实现的两点之间最短路径算法”存在各种实现错误,目前为止还没有找到一个完全正确的。所以,本人改正相关错误,上传个正确的版本,即:采用Matlab实现的两点之间Dijkstra(single path)算法。
1. Matlab源文件(dijkstra.m)
2. 测试
本文主要讲述最短路径算法,一个主要原因是网上的“基于Matlab实现的两点之间最短路径算法”存在各种实现错误,目前为止还没有找到一个完全正确的。所以,本人改正相关错误,上传个正确的版本,即:采用Matlab实现的两点之间Dijkstra(single path)算法。
1. Matlab源文件(dijkstra.m)
function [distance,path]=dijkstra(A,s,e) %% 参数说明 % 邻接矩阵A % 起点:s % 终点:e % 路径长: distance % 路径:path %% 算法主体 n=size(A,1); D=A(s,:); path=[]; visit=ones(1,n); visit(s)=0; parent=zeros(1,n); for i=1:n-1 temp=zeros(1,n); count=0; for j=1:n if visit(j) temp=[temp(1:count) D(j)]; else temp=[temp(1:count) inf]; end count=count+1; end [value,index]=min(temp); j=index; visit(j)=0; for k=1:n if D(k)>D(j)+A(j,k) D(k)=D(j)+A(j,k); parent(k)=j; end end end %% 结果输出(回溯法) t = e; %最短路径 while t~=s && t>0 path =[t,path]; p=parent(t);t=p; end path =[s,path]; if length(path)==1 % 最短路径长度 distance = A(s,e); else distance=D(e); end end
2. 测试
>> metrix=[ Inf 1 Inf Inf Inf Inf Inf Inf Inf Inf Inf 1 1 Inf 1 Inf Inf Inf Inf Inf Inf Inf Inf 1 Inf 1 Inf 1 Inf Inf Inf Inf Inf 1 Inf Inf Inf Inf 1 Inf 1 Inf Inf 1 Inf Inf Inf Inf Inf Inf Inf 1 Inf 1 Inf Inf Inf Inf Inf Inf Inf Inf Inf Inf 1 Inf 1 Inf Inf Inf Inf Inf Inf Inf Inf Inf Inf 1 Inf 1 Inf Inf Inf Inf Inf Inf Inf 1 Inf Inf 1 Inf 1 1 Inf Inf Inf Inf Inf Inf Inf Inf Inf 1 Inf Inf Inf Inf Inf Inf 1 Inf Inf Inf Inf 1 Inf Inf 1 Inf Inf Inf Inf Inf Inf Inf Inf Inf Inf 1 Inf 1 1 1 Inf Inf Inf Inf Inf Inf Inf Inf 1 Inf]
>> [distance, route]=dijkstra(metrix,1,1) distance = Inf route = 1 >> [distance, route]=dijkstra(metrix,1,2) distance = 1 route = 1 2 >> [distance, route]=dijkstra(metrix,1,7) distance = 5 route = 1 2 3 4 8 7
相关文章推荐
- django静态文件服务器的配置
- HDU 1078 FatMouse and Cheese(记忆化搜索)
- C语言C++语言中静态变量和静态函数
- vertica-使用dbvis工具报I O错误
- 盒子的的浮动
- 俄罗斯方块C语言的初步感受
- mysql-proxy读写分离
- jQuery+ajax总结
- 顺时针打印矩阵
- 1.python基础知识
- hdu1058 Humble Numbers
- Javascript学习笔记part1(Table单元格相同数据自动合并)
- 《构建之法》第8、9、10章 读书笔记和Sprint总结
- CEF3 开发注意点
- python测试多空交易效果代码
- 磁盘格式化 mke2fs
- 指针变量的理解! 课堂笔记
- Hibernate应用开发步骤(学习笔记)
- ibatis3中直接在xml中写明一对多的关系和利用ibatis的拦截器进行SQL重组达到分页的目的
- LOCAL_REQUIRED_MODULES 在apk的使用