一、最短路径
- 从A到B,总路径最短
- 在下图中,用点表示城市,点与点之间的连线表示城市间有道路相连。连线旁的数字表示道路的长度。现计划从城市1到城市3铺设一条天然气管道,请设计出最小长度管道铺设方案。
- 最短路径:从图中的某个顶点出发,到达另外一个顶点的所经过的边的权重之和最小的一条路径。
- 图:边和节点组成的结构,例如本题中的道路和城市
边带有方向的是有向图,否则为无向图 - 权重:每条边都有与之对应的值,本题中边为道路,边的权重就是道路长度
二、最短路径的代码实现(matlab)
- 函数调用:[dist, path, pred] = graphshortestpath(DG, 1, 3)
- dist是最短路径的值,path是最短路径的节点顺序,pred是到每一个节点的最短路径的终点前一个节点,DG为连接矩阵
如上所示为节点1到节点3的最短路径
w = [10,5,2,1,4,6,7,3,9,2];
DG = sparse([1,1,2,2,3,4,4,5,5,5],[2,5,5,3,4,3,1,2,3,4],w);
[dist,path,pred] = graphshortestpath(DG,1,3)
% biograph生成图对象,view显示该图
point_name = ['1','2','3','4','5'];
h = view(biograph(DG,point_name,'ShowWeights','on'))
% 将最短路径的节点和边缘标记为红色并增加线宽
% getedgesbynodeid得到图h的指定边的句柄
% 第一个参数是图,第二个是边的出点,第三个是边的入点
% 句柄确保能找到对应的东西
% get查询图的属性,h.Nodes(path),‘ID’得到图中最短路径
% set函数设置图形属性
edges = getedgesbynodeid(h,get(h.Nodes(path),'ID'));
set(edges,'LineColor',1 0 0])
set(edges,'LineWidth',3)