求解最优路径问题以一个例题引入
这个例题是一个有向图,在图里面已经标注了权值。在MATLAB里面图用矩阵表示,具体操作见下面:
step1,找出起始节点、终止节点、权值,这三个部分组成三个A、B、C向量,
A=[1 1 2 2 3 3 4 4 4 4 5 6 6 7 8];
B=[2 3 5 4 4 6 5 7 8 6 7 8 9 9 9];
C=[1 2 12 6 3 4 4 15 7 2 7 7 15 3 10];
利用系数矩阵生成函数sparse()函数将图转换为系数矩阵。
{
注解:这里先讲解sparse()函数的利用方法
S=sparse(i,j,s,m,n,nzmax) 这是完整的定义式,其中i,j, s,都是向量,i,j ,决定S的元素位置,向量s决定S的元素值,即S(i(k),j(k))=s(k), 最终生成的S是一个m*n的矩阵,nzmax决定S矩阵中非零元素的个数一般nzmax=length(s)。
}
R=sparse(A,B,C);
R(9,9)=0;
step2:
利用biography()函数将矩阵制成图表形式
{
注解:biography()函数的用法,biograghy(R,[],'ShowWeights','on');这里矩阵R数值就是要制成表的路径权值,如果R(i,j)=a!=0,则i——j路径上权值就为a。
上图就是最终生成的向量图。ShowWeights选项设置为on ,图像里面会显示路径权值。
如果要想显示出上图可以用view函数。
}
step3:
这一步就是利用graphshortestpath()函数找出最优路径,一般[d,p]=graphshortestpath(R,1,9)
其中R代表将要搜寻的图矩阵,1代表搜寻起始点,9代表搜寻终止节点。
d返回值代表距离起点与终点间距离,p返回值代表经过的节点。
无向图的最优路径搜寻