解决最短路径问题(最小运输成本)
网上许多解决方法 但是我运行的时候存在问题
在此提供直白一点的过程和可以运行到底的代码
只需要输入:
①相应的节点
②权重w(如果你求的是最短路径:w就是各个节点间的距离 如果求最小成本:w=各节点间的距离*成本)
③出发点 终点
代码输出:
①最短路径的路线 该路径的总距离(花费成本最低的路线 总成本)
②路线图
【案例】
比如说:求节点4→节点3的最小成本
超级简单!
听我解释给你听
代码:
只需要把a,b,c,d四个地方改成你的数据:(到代码里找这两行变量)
①DG=sparse(b,c,w,a,a);
②w;
a:你的题的节点的个数(此案例中共4个节点 如图)
b:初始节点(一定要注意!!我之前就是错在这个地方,必须要从小到大写)
c:下一个节点
w:(b→c)对应的距离或者成本
比如说假设这个题只有4个节点:
节点1:它有到节点2、4 两条路径(1→2)(1→4)
节点2:它有到节点1、3、4三条路径(2→1)(2→3)(2→4)
节点3:它有到节点2一条路径(3→1)
节点4:它有到节点1、2两条路径(4→1)(4→2)
那么:
a=4
b=[1 1 2 2 2 3 4 4]
c=[2 4 1 3 4 2 1 2]
w=[6 2 6 1 2 1 2 2]
// 只需要改动两个地方
clear
clc
% 定义路线权
w= [6 2 6 1 2 1 2 2];
% 构造邻接矩阵
DG = sparse([1 1 2 2 2 3 4 4],[2 4 1 3 4 2 1 2],w,4,4);
first = input('请输入初始节点:');
last = input('请输入终止节点:');
% 绘制有向赋权图
h = view(biograph(DG,[],'ShowWeights','on'));
[dist,path,pred] = graphshortestpath(DG,first,last);
% 标记路线经过的节点
set(h.Nodes(path),'Color',[1 0.4 0.4]);
% 标记路线经过的路径
edges = getedgesbynodeid(h,get(h.Nodes(path),'ID'),get(h.Nodes(path),'ID'));
set(edges,'LineColor',[1 0 0]);
set(edges,'LineWidth',1.5);
path
dist
输出的图:(红色的是成本最低的路线)
path:花费成本最低的路径:4→2→3
dist:该路径的总成本:3元