-
作图
-
matlab
% 函数graph(s,t):可在 s 和 t 中的对应节点之间创建边,并生成一个图 G1 = graph(s1, t1); plot(G1) % 函数graph(s,t,w):可在 s 和 t 中的对应节点之间以w的权重创建边,并生成一个图 G2 = graph(s2, t2); plot(G2, 'linewidth', 2) % 设置线的宽度 % 下面的命令是在画图后不显示坐标 set( gca, 'XTick', [], 'YTick', [] );
-
上面都是无向图,要做出有向图,只需要将graph改为digraph就行了。
-
Matlab做出来的图不是很漂亮,要是节点比较少,还是推荐大家使用在线作图
-
-
权重邻接矩阵
-
无向图的权重邻接矩阵
-
带权重的四个节点的无向图
-
无向图对应的权重邻接矩阵
-
结论:
-
无向图对应的权重邻接矩阵D是一个对 称矩阵;
-
其主对角线上元素为0.
-
表示第i个节点到第j个节点的权重。
-
-
-
有向图的权重邻接矩阵
-
带权重的四个节点的有向图
-
有向图对应的权重邻接矩阵
-
结论
-
有向图对应的权重邻接矩阵D是一般不 再是对称矩阵;
-
其主对角线上元素为0.
-
表示第i个节点到第j个节点的权重。
-
-
-
-
迪杰斯特拉算法
-
引入: 图中有0‐8共九个地点,地点之间若用直线连接则表明两地可直 接到达,直线旁的数值表示两地的距离。 问题: 起点为0,终点为4,怎么走路程最短。
-
缺点: 可以用于有向图,但不能处理负权重 (可使用贝尔曼‐福特算法修复[贝尔曼‐福特算法实际上处理的是具有负权重的有向图。且该有向图也不能含有负权回路])
-
-
matlab计算最短路径
[P,d] = shortestpath(G,start,end [,'Method',algorithm] )
-
功能: 返回图G中start节点到end节点的最短路径
-
输入参数:
-
G ‐ 输入图(graph 对象 | digraph 对象)
-
start 起始的节点
-
end 目标的节点
-
[,‘Method’,algorithm]是可选的参数,表示计算最短路径的算法。一般我 们不用手动设置,默认使用的是“auto”, 具体可设置的参数见下一页课件。
-
-
输出参数:
-
P – 最短路径经过的节点
-
d – 最短距离
-
-
-
可选的算法
-
'auto'(默认值)
'auto' 选项会自动选择算法:
-
'unweighted' 用于没有边权重的 graph 和 digraph 输入。
-
'positive' 用于具有边权重的所有 graph 输入,并要求权 重为非负数。此选项还用于具有非负边权重的 digraph 输 入。
-
'mixed' 用于其边权重包含某些负值的 digraph 输入。图不能包含负循环。
-
-
'unweighted'
-
广度优先计算,将所有边权重都视为 1。
-
-
'positive'
-
Dijkstra 算法,要求所有边权重均为非负数。
-
-
'mixed'(仅适用于 digraph)
-
适用于有向图的 Bellman‐Ford 算法,要求图没有负循环。 尽管对于相同的问题,'mixed' 的速度慢于 'positive',但 'mixed' 更为通用,因为它允许某些边权重为负数。
-
-
-
Matlab演示
% 注意哦,Matlab中的图节点要从1开始编号,所以这里把0全部改为了9 % 编号最好是从1开始连续编号,不要自己随便定义编号 d = distances(G [,'Method',algorithm]) %此时出现的为矩阵 [nodeIDs,dist] = nearest(G,s,d [,'Method',algorithm]) %返回图形 G 中与节点 s 的距离在 d 之内的所有节点。 %nodeIDs是符合条件的节点;Dist是这些节点与s的距离
清风数模课---图论最短路径问题
最新推荐文章于 2023-05-08 08:29:11 发布