From d455ce15656d7bb1d53b6b0bd7d4516d661a481b Mon Sep 17 00:00:00 2001 From: phzrjyvu9 <2026074240@qq.com> Date: Sun, 14 Jul 2024 14:27:26 +0800 Subject: [PATCH] =?UTF-8?q?=E5=9B=BE=EF=BC=88=E6=9C=80=E7=9F=AD=E8=B7=AF?= =?UTF-8?q?=E5=BE=84=EF=BC=89=EF=BC=88=E6=9C=80=E5=B0=8F=E7=94=9F=E6=88=90?= =?UTF-8?q?=E6=A0=91=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- mm2_graph.m | 94 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 94 insertions(+) create mode 100644 mm2_graph.m diff --git a/mm2_graph.m b/mm2_graph.m new file mode 100644 index 0000000..4a0e1a8 --- /dev/null +++ b/mm2_graph.m @@ -0,0 +1,94 @@ +%ej.4.10仓库选址 +clc; clear; close all; format long g; +a=zeros(6); +a(1,[2,5])=[20,15]; +a(2,[1,3,4,5])=[20,20,60,25]; +a(3,[2,4,5])=[20,30,18]; +a(4,[2,3])=[60,30]; +a(5,[1,2,3,6])=[15,25,18,15]; +a(6,5)=15; +s = cellstr(strcat('销售点',int2str([1:6]'))); +G=graph(a,s); +P = plot(G,'layout','force','EdgeColor','k','NodeFontSize',12); +D=[]; +for i=1:6 + temp=0; + for j=1:6 + [path,d]=shortestpath(G,i,j); + if d>temp; + temp=d; + end + end + D=[D,temp]; +end +[minVal,minInd]=min(D); +disp('仓库应建在销售点'); +disp(minInd); + + +%答案版 +clc; clear; close all; + +% 初始化邻接矩阵 +a = zeros(6); +a(1, [2, 5]) = [20, 15]; +a(2, 3:5) = [20, 60, 25]; +a(3, [4, 5]) = [30, 18]; +a(5, 6) = 15; + +% 创建节点标签 +s = cellstr(strcat('V', int2str([1:6]'))); + +% 创建图 +G = graph(a, s, 'upper'); + +% 计算所有节点之间的最短路径距离矩阵 +d = distances(G); + +% 计算从每个节点到其他节点的最大最短路径距离 +D = max(d, [], 2)'; %第三个参数 2 指定沿着矩阵的第二个维度(即列)进行操作。 + +% 找到最大最短路径距离中的最小值及其下标 +[minD, minIndex] = min(D); + +% 绘制图 +plot(G, 'EdgeLabel', G.Edges.Weight, 'Layout', 'force');%设置边的标签 + +% 显示结果 +fprintf('从每个节点到任意其他节点的最大最短路径距离: \n'); +disp(D); +fprintf('最大最短路径距离中的最小值为: %f\n', minD); +fprintf('对应的节点为: V%d\n', minIndex); + +%设备更新问题; +clc;clear;close all; +a=zeros(6); +a(1,[2:6])=[15,20,27,37,54]; +a(2,[3:6])=[15,20,27,37]; +a(3,[4:6])=[16,21,28]; +a(4,[5:6])=[16,21]; +a(5,6)=17; +s=cellstr(strcat(int2str((1:6)'),'年初')); +G=digraph(a,s); +P = plot(G,'layout','force','EdgeColor','k','NodeFontSize',12); +[path,d]=shortestpath(G,1,6);%注意参数个数 +highlight(P,path,"EdgeColor","red",'LineWidth',3.5); + + +%最小生成树 +clc;clear; +a=zeros(9); +a(1,[2:9])=[2 1 3 4 4 2 5 4]; % 顶点1到其他顶点的边的权重 +a(2,[3 9])=[4 1]; % 顶点2到顶点3、顶点9的边的权重 +a(3,4)=1; % 同上。因为写过1到3,和2到3的边的权重,无需重复设 +a(4,5)=1; +a(5,6)=5; +a(6,7)=2; +a(7,8)=3; +a(8,9)=5; +s=cellstr(strcat('节点',int2str([1:9]'))); +G=graph(a,s,'upper'); +P=plot(G,'layout','force'); +T=minspantree(G,'Method','sparse'); +L=sum(T.Edges.Weight); +highlight(P,T,"EdgeColor","red",'LineWidth',2.5);