介于现在新版的matlab已经淘汰了graphshortestpath函数,由此写了这个代码
这道题要求的是使用matlab做最短距离
我采用的方法比较笨,但是非常适合初学者
s、t和weights是三个向量,分别表示边的起始点、终止点和权重。
题目要求我们求起点(s)A到终点(t)G的最短距离(因为A,B1,B2,等符号写入matlab中表示有问题),那么我们可以用1 2 3....来代替。
weights:权重。例如A→B1距离=5
即weights=5
一一对应在等式中写出来
graph函数根据这些信息创建一个图Q。
plot函数用于绘制图Q,'EdgeLabel'参数表示在边上显示权重。
shortestpath函数用于计算从节点1到节点16的最短路径。它返回两个值:P和d。P是一个向量,表示最短路径上的节点序列;d是一个标量,表示最短路径的长度。他的方法和graphshortestpath函数差不多。
这道题的代码如下:
s = [1 1 2 2 2 3 3 3 4 4 5 5 6 6 7 7 8 8 9 9 10 10 11 11 12 12 13 13 14 15];
t = [2 3 4 5 6 5 6 7 8 9 8 9 9 10 9 10 11 12 12 13 12 13 14 15 14 15 14 15 16 16];
weights = [5 3 1 3 6 8 7 6 6 8 3 5 3 3 8 4 2 2 1 2 3 3 3 5 5 2 6 6 4 3];
Q = graph(s,t,weights);
plot(Q,'EdgeLabel',Q.Edges.Weight)
[P,d] = shortestpath(Q,1,16)