weixin_45776554 2021-11-07 16:48 采纳率: 0%
浏览 46

利用MATLAB实现路径优化问题

平面上有若干个固定点,已知任意两点之间的距离,规定一个起点,从起点出发,求不限终点,经过所有点的一条最短路径。

  • 写回答

1条回答 默认 最新

  • 技术专家团-Joel 2021-11-07 18:48
    关注

    你好,确定起始点的最短路径问题只需要距离矩阵和起始点编号即可:

    function [d,index1]=mydijkstra2(a,sb)
    %从起点出发,寻找遍历所有点的最短路径
    % 输入:a—邻接矩阵,a(i,j)是指i到j之间的距离,可以是有向的
    % sb—起点的标号
    % 输出:d—从起点开始便利所有标号的最短路距离, index1—从起点开始便利所有标号的最短路路径
    %pb用来存放P标号信息 index1为标号顶点顺序 index2标号顶点索引
    a(a==0)=inf;
    pb(1:length(a))=0;pb(sb)=1;index1=sb;index2=ones(1,length(a));
    %d用来存放最短通路的值
    d(1:length(a))=inf;d(sb)=0;
    temp=sb;%最新的P标号的起点
    while sum(pb)<length(a)
        tb=find(pb==0);
        d(tb)=min(d(tb),d(temp)+a(temp,tb));
        tmpb=find(d(tb)==min(d(tb)));
        temp=tb(tmpb(1));%可能有多个点同时达到最小值,只取其中一个
        pb(temp)=1;
        index1=[index1,temp];
        temp2=find(d(index1)==d(temp)-a(temp,index1));
        index2(temp)=index1(temp2(1));
    end
    end
    

    举个栗子

    a=[0 50 Inf 40 25 10
    50 0 15 20 Inf 25
    Inf 15 0 10 20 Inf
    40 20 10 0 10 25
    25 Inf 20 10 0 55
    10 25 Inf 25 55 0]; % 距离矩阵
    sb = 2; % 从第二个点出发
    [d,index1]=mydijkstra2(a,sb)
    

    结果:

    d =
    
        35     0    15    20    30    25
    
    
    index1 =
    
         2     3     4     6     5     1
    

    可见最终的路径是这么走的2 →3 →4→6→5→1
    而且最短路径长度是 35+0+15 +20+30+25=125
    如有帮助还望题主给个采纳支持一下答主答题哟,谢谢啦

    评论

报告相同问题?

问题事件

  • 创建了问题 11月7日

悬赏问题

  • ¥20 关于#硬件工程#的问题,请各位专家解答!
  • ¥15 关于#matlab#的问题:期望的系统闭环传递函数为G(s)=wn^2/s^2+2¢wn+wn^2阻尼系数¢=0.707,使系统具有较小的超调量
  • ¥15 FLUENT如何实现在堆积颗粒的上表面加载高斯热源
  • ¥30 截图中的mathematics程序转换成matlab
  • ¥15 动力学代码报错,维度不匹配
  • ¥15 Power query添加列问题
  • ¥50 Kubernetes&Fission&Eleasticsearch
  • ¥15 報錯:Person is not mapped,如何解決?
  • ¥15 c++头文件不能识别CDialog
  • ¥15 Excel发现不可读取的内容