图论中的最短路问题本质是一个最优化问题,也是图论中的经典问题之一。从数学上考虑,大量的优化问题等价于在图中寻找最短路径问题,而求最短路的过程实际也是一个DFS(depth-first-搜索)问题。最短路问题的经典算法是采用Dijkstra和Floyd两种算法来实现。
首先定义最短路问题中的权值矩阵,由前置定义:对简单图G的每一边e赋予一个实数,记为w(e),称为边e的权,而每边均赋予权值的图称为赋权图。
对无向图而言,定义权值矩阵为:
从而可知,对无向图而言,dij=dji,即权值矩阵W为对称矩阵
在权值矩阵的基础上,最短路问题可以定义为:在给定的赋权图G中,求互异顶点之间的最短路劲,简称为最短路问题。
Dijkstra的算法思想如下所示:
其matlab程序实现也很简单,如下所示:
function D=shortlength(W) %求最短路矩阵函数
D=W %最短路矩阵
n=length(W) %权值矩阵大小
m=1
while m<=n
for i=1:n
for j=1:n
if D(i,j)>D(i,m)+D(m,j)
D(i,j)=D(i,m)+D(m,j); %Dijstra算法
end
end
end
m=m+1;
end
D;