清风第八讲:图论最短路径问题
强烈推荐清风的视频
可以在B站搜索清风,他的数模教学视频简单易懂,内容丰富,真心推荐!!!
作图的方法
在线作图:
1.打开网站
2.看到界面如图
3.在左上方选择Undirected(无向图)或Directed(有向图)
4.在中间上面有三个分别是0-index(从0排序)、1-index(从1排序)、custom labels(自定义标签)
5.然后在左边Node Count下输入预设的节点数
6.在Graph Date下输入各节点与各节点的关系,例如: 输入"1" “2” “1 2 8” 表示连接1到2且边的权重为8
7.点击右下角Download as PNG下载制作好的图就搞定了
matlab作图
matlab作图需要用到函数graph(s,t),可以在s与t之间创建边
例如:
G1 = graph(s1,t1);
plot(G1)
加权重的话只需在后面加上权重w
例如:
G2 = graph(s,t,w)
plot(G2)
去掉坐标可以使用代码:
set( gca, 'XTick', [], 'YTick', [] );
做出有向图只需将函数graph(s,t,w) 改成函数disgraph(s,t,w)
迪杰斯特拉算法(dijkstra)
这里只做简单的概述:
问题现有一无向图如图所示:
求0到4的最短路径
Matlab程序演示
需要注意的点:matlab只能从1开始计数
于是本题将起始点0改为9
输入代码
s = [9 9 1 1 2 2 2 7 7 6 6 5 5 4];
t = [1 7 7 2 8 3 5 8 6 8 5 3 4 3];
w = [4 8 3 8 2 7 4 1 6 6 2 14 10 9];
G = graph(s,t,w);
plot(G, 'EdgeLabel', G.Edges.Weight, 'linewidth', 2)
set( gca, 'XTick', [], 'YTick', [] );
[P,d] = shortestpath(G, 9, 4)
效果
返回任意两点距离代码:
d = distances(G [,'Method',algorithm])
效果