精华内容
下载资源
问答
  • 利用matlab程序复杂网络的最短路径,方法简便值得使用
  • MATLAB求复杂网络的最短路径
  • 该程序是matlab编写的,已知起点和终端,找到在指定的步数下,能到达的最短路径
  • Matlab编程求最短路径

    2021-10-12 16:23:11
    %以下构造一个图并求最短路径,注意图中节点的编号从1开始,不能为0 clear %起点集 s = [9 9 9 9 9 9 9 9 1 1 1 2 2 2 3 4 5 5 6 7]; %终点集 e = [1 2 3 4 5 6 7 8 2 4 8 3 4 8 8 8 6 8 8 8]; %顶点到顶点的边上的...

    %以下构造一个图并求最短路径,注意图中节点的编号从1开始,不能为0
    clear
    %起点集
    s = [9 9 9 9 9 9 9 9 1 1 1 2 2 2 3 4 5 5 6 7];
    %终点集
    e = [1 2 3 4 5 6 7 8 2 4 8 3 4 8 8 8 6 8 8 8];
    %顶点到顶点的边上的权值
    w = [2140 4612 3923 4312 1840 3561 5386 6011 1354 1752 1811 3222 2500 1819 1110 2267 120 2613 1804 2943];%权重
    %构建s、e、w构成的图
    G = graph(s,e,w);
    plot(G,'EdgeLabel',G.Edges.Weight,'LineWidth',2);
    %求从指定的点到点的最短路径,P为最短路径,D为最短路径的大小
    [P,D] = shortestpath(G,9,8);
    %%高亮显示路径
    myplot = plot(G,'EdgeLabel',G.Edges.Weight,'LineWidth',2);
    %将最短路径设置为高亮显示
    highlight(myplot,P,'EdgeColor','r');
    P
    D

     

    % 构造图也可使用
    % 构造一个稀疏矩阵
    % G=sparse(s,e,w,9,9);
    % h = view(biograph(DG,[],'ShowWeights','on'));

     

    展开全文
  • Dijkstra最短路径算法的Matlab实现 包括最短路径的打印子程序
  • MATLAB实现最短路径

    2021-08-30 22:55:17
    目录 一、Dijkstra是什么?...最短路径即从图中的某个顶点出发到达另外一个顶点的所经过的边的权重和最小的一条路径 二、使用步骤 1.引入库 代码如下(示例): import numpy as np import pandas as p

    目录

    一、Dijkstra是什么?

    二、算法介绍

    1.核心思想

    2.具体思路

    3MATLAB实现

    总结


    前言

    本人是数学建模在学习的小白,分享一下最近学习的内容也顺便做一下笔记。


    提示:以下是本篇文章正文内容,下面案例可供参考

    一、Dijkstra是什么?

    Dijkstra是解决最短路径的一种算法

    最短路径即从图中的某个顶点出发到达另外一个顶点的所经过的边的权重和最小的一条路径

    二、算法介绍

    1.核心思想

    广度优先搜索

    2.具体思路

    1.初始化,即所有的节点都是未访问节点(0),所有的距离都是无穷大(INF),所有的父亲节点都是-1,表示不存在。

    2.假设起点(A),然后对应的访问状态变为1,对应的距离变为0,其父亲节点变为本身。

    3.开始访问与起点相邻的节点(B)的信息(此时这些节点还没有被访问)

    更新规则如下:

    如果(A与B的距离加上A列表中的距离)小于(B列表中的距离),那么我们就将B列表中的距离更新为较小的距离,并将其父亲节点更新为A。

    4在所有未访问的节点里找到表格里具有最小距离的那个节点,并将其作为新的已访问节点。

    3MATLAB实现

    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);
    [P,D] = shortestpath(G,9,4);
    %%高亮显示路径
    myplot = plot(G,'EdgeLabel',G.Edges.Weight,'LineWidth',2);
    highlight(myplot,P,'EdgeColor','r');

    结果:


    三、总结

    这既是今天学习的内容。

    ——更新于2021.8.31

    展开全文
  • 该资源为用matlab开发的,最短路径,能标识出路径,可以作为迷宫、最短路径的参考,对应的博客是https://blog.csdn.net/sinat_30815943/article/details/106954657,欢迎各位关注转发本人博客
  • 求最短路径的Floyd算法实现,无向图和有向图均适用。1先区别有向图和无向图,2输入顶点数和边数并检查合法性,3输入每边的起点、终点、权重并检查合法性,并初始化邻接矩阵和路径矩阵,4调用自定义函数Floyd
  • 利用Matlab编写的求解最短路径的Dijkstra算法,测试通过
  • ∙\bullet∙ 每队顶点的最短路径 ∙\bullet∙ 有向图、无向图和混合图 1.2算法思想 直接在图的带权邻接矩阵中用插入顶点的方法依次递推地构造出n个矩阵D(1),D(2)…D(n)(每次加入一个点然后更新最短路径矩阵D),...



    1.Floyed算法

    1.1适用范围

    ∙ \bullet 求每队顶点的最短路径

    ∙ \bullet 有向图、无向图和混合图

    1.2算法思想

    直接在图的带权邻接矩阵中用插入顶点的方法依次递推地构造出n个矩阵D(1),D(2)…D(n)(每次加入一个点然后更新最短路径矩阵D),D(n)是图的最短距离矩阵,同时引入一个后继点矩阵path记录两点间的最短路径。

    1.3实例

    对于如下无向图:
    在这里插入图片描述
    我们可以得如下带权邻接矩阵:
    [ 0 7 9 i n f i n f 14 7 0 10 15 i n f i n f 9 10 0 11 i n f 2 i n f 15 11 0 6 i n f i n f i n f i n f 6 0 9 14 i n f 2 i n f 9 0 ] \begin{bmatrix} 0 & 7 & 9 & inf & inf & 14\\ 7 & 0 & 10 &15 & inf & inf\\ 9 & 10 & 0 & 11 & inf & 2\\ inf & 15 & 11 & 0 & 6 & inf\\ inf & inf & inf & 6 & 0 & 9\\ 14 & inf & 2 & inf & 9 & 0\\ \end{bmatrix} 079infinf14701015infinf910011inf2inf151106infinfinfinf60914inf2inf90


    实现步骤

    ∙ \bullet 变量:输入变量与输出变量

    输入变量含义
    w矩阵带权邻接矩阵
    start初始点
    terminal终止点
    输出变量含义
    D矩阵D(i,j)表示i到j的最短路径
    path矩阵path(i,j)表示i到j之间的最短路径上顶点i的后继点
    min1start与terminal之间的最短距离
    path1start与terminal之间的最短路径

    ∙ \bullet 赋初值:对所有的i、j, D ( i , j ) = w ( i , j ) , p a t h ( i , j ) = j , k = 1 ( k 表 示 加 入 的 顶 点 个 数 ) D(i,j)=w(i,j),path(i,j)=j,k=1(k表示加入的顶点个数) D(i,j)=w(i,j),path(i,j)=j,k=1(k)

    ∙ \bullet 更新D(i,j)、path(i,j),对于所有i、j,若 D ( i , k ) + D ( k , j ) < D ( i , j ) D(i,k)+D(k,j)<D(i,j) D(i,k)+D(k,j)<D(i,j)
    则: D ( i , j ) = D ( i , k ) + D ( k , j ) , p a t h ( i , j ) = p a t h ( i , k ) , k = k + 1 D(i,j)=D(i,k)+D(k,j), path(i,j)=path(i,k),k=k+1 D(i,j)=D(i,k)+D(k,j),path(i,j)=path(i,k),k=k+1

    ∙ \bullet 每次插入一个顶点重复进行更新操作,直到 k=n+1 终止。


    2.代码

    2.1floyd函数

    function [D,path,min1,path1]=floyd(a,start,terminal)
    %D(i,j)表示i到j的最短路径,path(i,j)表示i到j之间的最短路径上顶点i的后继点。
    %min1返回start和terminal之间的最短距离,path1返回start和terminal之间的最短路径
    %a为带权邻接矩阵,start、terminal分别是起始点和终止点
    
    D=a;n=size(D,1);path=zeros(n,n);
    %n为顶点个数,生成D、path矩阵
    
    %遍历一遍矩阵,初始化path矩阵,先将可以直接相连的点的path进行补充
    for i=1:n
        for j=1:n
            if D(i,j)~=inf
                path(i,j)=j;
            end  
        end
    end
    
    %三重遍历,查找是否有中继点可以使得路径缩短,若有则更新D、path矩阵
    for k=1:n
        for i=1:n
            for j=1:n
                if D(i,k)+D(k,j)<D(i,j)
                    D(i,j)=D(i,k)+D(k,j);
                    path(i,j)=path(i,k);
                end 
            end
        end
    %这里演示了每一步的调整过程
    k,D,path
    end
    
    %判断输出参数是否为三个
    if nargin==3
        min1=D(start,terminal);
        m(1)=start;
        i=1;
        path1=[ ];   
        %根据path路径一步一步跳转找到具体路径,返回path1
        while   path(m(i),terminal)~=terminal
            k=i+1;                                
            m(k)=path(m(i),terminal);
            i=i+1;
        end
        m(i+1)=terminal;
        path1=m;
    end   
    
    
    

    2.2调用函数

    w = [0,7,9,inf,inf,14;
         7,0,10,15,inf,inf;
         9,10,0,11,inf,2;
         inf,15,11,0,6,inf;
         inf,inf,inf,6,0,9;
         14,inf,2,inf,9,0];
     start=1;terminal=5;
    [D,path,min,path1]=floyd(w,start,terminal);
    D,path,min,path1
    

    结果
    在这里插入图片描述
    这里介绍一下如何看path矩阵查找最短路径:比如说要查找1到5的最短路径

    ∙ \bullet 那么我们就要找 path(1,5)=3,所以目前路径为1->3

    ∙ \bullet 接着我们就要找 path(3,5)=6,所以目前路径为1->3->6

    ∙ \bullet 接着我们就要找 path(6,5)=5,到达终点,所以最终路径为1->3->6->5

    注意:调用floyd函数的时候,同时还会输出每次插入一个顶点之后D矩阵和path矩阵的变化。



    展开全文
  • 每一次迭代产生一个永久标号,把它接入到以起始点为v0根的树中,在这棵树上每一个顶点与根结点之间的路径皆为最短路径。 1.3实例 寻找从顶点1到顶点5的最短路径: 一共有六个顶点,生成的带权邻接矩阵为:



    1.Dijkstra算法

    1.1使用范围

    ∙ \bullet 寻求从一固定顶点到其余各点的最短路径

    ∙ \bullet 有向图、无向图和混合图

    ∙ \bullet 权非负

    1.2算法思路

    每一次迭代产生一个永久标号,把它接入到以起始点为v0根的树中,在这棵树上每一个顶点与根结点之间的路径皆为最短路径。

    1.3实例

    寻找从顶点1到顶点5的最短路径:
    在这里插入图片描述
    一共有六个顶点,生成的带权邻接矩阵为:

    [ 0 7 9 i n f i n f 14 7 0 10 15 i n f i n f 9 10 0 11 i n f 2 i n f 15 11 0 6 i n f i n f i n f i n f 6 0 9 14 i n f 2 i n f 9 0 ] \begin{bmatrix} 0 & 7 & 9 & inf & inf & 14\\ 7 & 0 & 10 &15 & inf & inf\\ 9 & 10 & 0 & 11 & inf & 2\\ inf & 15 & 11 & 0 & 6 & inf\\ inf & inf & inf & 6 & 0 & 9\\ 14 & inf & 2 & inf & 9 & 0\\ \end{bmatrix} 079infinf14701015infinf910011inf2inf151106infinfinfinf60914inf2inf90


    2.代码

    2.1dijstra函数

    function [min,path]=dijkstra(w,start,terminal)
    %输入变量w为所求图的带权邻接矩阵,start、terminal分别为路径的起点和终点的编号。
    %返回path为从start到termial的最短路径以及长度min
    
    n=size(w,1); label(start)=0; f(start)=start;
    %n为所求图的顶点个数,label存放到各点的最短路径,f(v)表示v的父顶点用来还原路径
    
    %初始化将除了start以外的顶点label均设置为无穷大
    for i=1:n
        if i~=start
           label(i)=inf;
        end
    end
    
    %s数组存放已经搜好的顶点集,初始化只有start
    s(1)=start; u=start;
    while length(s)<n
        %遍历一遍顶点,将不在顶点集中的顶点选出来进行下面的if判定
        for i=1:n
            ins=0;
            for j=1:length(s)
                if i==s(j)
                    ins=1;
                end  
            end
            %判断是否有中继顶点使得它们之间的距离更短,如果有的话更新距离并更新前驱结点
            if ins==0
                v=i;
                if label(v)>(label(u)+w(u,v))
                    label(v)=(label(u)+w(u,v)); f(v)=u;
                end 
            end
        end   
        v1=0;
        k=inf;
        %同上再次进行遍历,找到目前最短的路径顶点v1,放入顶点集并改变u的值
        for i=1:n
            ins=0;
            for j=1:length(s)
                if i==s(j)
                    ins=1;
                end
            end
            if ins==0
                v=i;
                if k>label(v)
                    k=label(v);  v1=v;
                end  
            end
        end
        s(length(s)+1)=v1;  
        u=v1;
    end
    
    min=label(terminal); path(1)=terminal;
    i=1; 
    
    %按倒序结果推出最短路径
    while path(i)~=start
        path(i+1)=f(path(i));
        i=i+1 ;
    end
    path(i)=start;
    L=length(path);
    %翻转得到最短路径
    path=path(L:-1:1);
    

    2.2调用函数

    w = [0,7,9,inf,inf,14;
         7,0,10,15,inf,inf;
         9,10,0,11,inf,2;
         inf,15,11,0,6,inf;
         inf,inf,inf,6,0,9;
         14,inf,2,inf,9,0];
     start=1;terminal=5;
    [min,path]=dijkstra(w,start,terminal);
    min,path
    

    结果
    在这里插入图片描述



    展开全文
  • matlab 最短路径算法

    2015-06-09 09:46:29
    两点家 最短路径,已经最短路径经过的其他节点情况
  • matlab解决最短路径问题

    千次阅读 2019-08-23 10:04:55
    这次主要是提供一个解决最短路径问题的matlab app。 本次分享的最短路径问题app仅针对无向图,实际上由于单行道存在,很多时候实际问题是一个有向图,有向图内容我们将在后期介绍。 两种表示方法 邻接矩阵法...
  • SHPATH - 避障的最短路径(版本 1.3) 给定一个由 0(对于开放空间)和 1(对于障碍物)组成的“地形”矩阵,该函数计算两个指定点之间的最短路径,同时避开障碍物。 采用两阶段解决方案。 在第一阶段,算法通过...
  • matlab遗传算法求最短路径

    热门讨论 2011-07-15 21:10:41
    MATLAB实现遗传算法,求最短路径,经检验比较稳定。
  • matlab最短路径

    千次阅读 2020-11-14 21:35:14
    图论最短路径 (1)matlab作图 G = graph(s, t) 其中,s 和 t 都是节点组成的向量,表示从s 、t对应节点之间有边。 然后,plot(G)即可画出图。 G = graph(s, t, w) ...(2)Matlab计算最短路径 [P,d] = s
  • matlab求解最短路径

    万次阅读 多人点赞 2017-08-16 16:13:57
    matlab工具箱图的最短路径
  • 关于遗传算法的一个简单例子,在MATLAB中实现搜寻最短路径(最优化)的目的,仅供大家参考学习,谢谢
  • 最短路径matlab

    2018-05-25 09:29:19
    首先在m脚本文件canshuo.m中输入节点个数和路径权重 在命令窗口中输入canshu 用s=12,e=10的格式输入要求的起止点,再输入main即可得到两点之间的路径和长度。
  • matlab编写迪杰斯特拉算法求解最短路问题,文件是程序源代码
  • 按街口的坐标位置画出街道图,并在街道图上画出9号街口到各街口的最短道路(最短路程树)。有代码,main运行即可
  • Matlab计算最短路径及路径的个数

    万次阅读 2016-04-26 12:00:45
    最近老板让计算最短路径及路径个数,找遍了所有工具箱,都没现成的。急死了,什么Dijkstra和Floyd都搞不定。最后,想了想,算了吧,自己编吧,反正自己用,又没有算法复杂度要求。于是自己就写了个小程序(本程序仅...
  • matlab图论工具箱主要用于求最短路径,最小生成树和最大流。 其常见命令如下表: 函数名 功能 graphallshortestpaths 图中所有顶点对之间的最短距离 graphconncomp 找无向图的连通分支,或有向图的强...
  • 关于动态规划最短路径求解的matlab学习例子
  • Dijkstra算法找最短路径代码,包括43个案例分析
  • MATLAB-K最短路径算法(KSP,K-shortest pathes)

    千次阅读 热门讨论 2020-10-16 17:30:12
    MATLAB-K最短路径算法(KSP,K-shortest pathes) MATLAB代码封装成函数,直接使用。 参考: k最短路径算法之Yen’s Algorithm 基于网络流量的SDN最短路径转发应用 算法背景 K 最短路径问题是最短路径问题的扩展和变形...
  • matlab中,利用dijkstra算法,如何把最短路径和其他非最短路径的路径同时出来 function [sp, spcost] = dijkstra_all(matriz_costo, s, d) n=size(matriz_costo,1); S(1:n) = 0; %s, vector, set ...
  • 基于 matlab 的 floyd 算法 matlab 计算最短路径 function [d,path]=floyd(a,sp,ep) % floyd - 最短路问题 % % Syntax: [d,path]=floyd(a,sp,ep) % % Inputs: % a - 距离矩阵是指 i 到 j 之间的距离可以是有向的 % ...
  • 出任意两点间所有最短路径。数模时编写。考虑邻接矩阵中主对角线数据(虽然一般情况都取零)。更具实用性 能出任意两点间所有最短路径。数模时编写。考虑邻接矩阵中主对角线数据(虽然一般情况都取零)。更具...
  • MATLAB实现最短路径问题中的Floyd算法、代码以及说明文档。

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 4,004
精华内容 1,601
关键字:

matlab求最短路径

matlab 订阅