清风数模课---图论最短路径问题

  1. 作图

    1. 在线作图网站

    2. matlab

       % 函数graph(s,t):可在 s 和 t 中的对应节点之间创建边,并生成一个图
       G1 = graph(s1, t1);
       plot(G1)
       % 函数graph(s,t,w):可在 s 和 t 中的对应节点之间以w的权重创建边,并生成一个图
       G2 = graph(s2, t2);
       plot(G2, 'linewidth', 2)  % 设置线的宽度
       % 下面的命令是在画图后不显示坐标
       set( gca, 'XTick', [], 'YTick', [] ); 
      • 上面都是无向图,要做出有向图,只需要将graph改为digraph就行了。

      • Matlab做出来的图不是很漂亮,要是节点比较少,还是推荐大家使用在线作图

  2. 权重邻接矩阵

    1. 无向图的权重邻接矩阵

      1. 带权重的四个节点的无向图

         

         

      1. 无向图对应的权重邻接矩阵

      2. 结论:

        1. 无向图对应的权重邻接矩阵D是一个对 称矩阵;

        2. 其主对角线上元素为0.

        3. D_{ij}表示第i个节点到第j个节点的权重。

    2. 有向图的权重邻接矩阵

      1. 带权重的四个节点的有向图

         

         

      2. 有向图对应的权重邻接矩阵

         

      3. 结论

        1. 有向图对应的权重邻接矩阵D是一般不 再是对称矩阵;

        2. 其主对角线上元素为0.

        3. D_{ij}表示第i个节点到第j个节点的权重。

  3. 迪杰斯特拉算法

    1. 引入: 图中有0‐8共九个地点,地点之间若用直线连接则表明两地可直 接到达,直线旁的数值表示两地的距离。 问题: 起点为0,终点为4,怎么走路程最短。

    2. 缺点: 可以用于有向图,但不能处理负权重 (可使用贝尔曼‐福特算法修复[贝尔曼‐福特算法实际上处理的是具有负权重的有向图。且该有向图也不能含有负权回路])

  4. matlab计算最短路径

     [P,d] = shortestpath(G,start,end [,'Method',algorithm] )
    1. 功能: 返回图G中start节点到end节点的最短路径

    2. 输入参数:

      1. G ‐ 输入图(graph 对象 | digraph 对象)

      2. start 起始的节点

      3. end 目标的节点

      4. [,‘Method’,algorithm]是可选的参数,表示计算最短路径的算法。一般我 们不用手动设置,默认使用的是“auto”, 具体可设置的参数见下一页课件。

    3. 输出参数:

      1. P – 最短路径经过的节点

      2. d – 最短距离

  5. 可选的算法

    1. 'auto'(默认值)

      'auto' 选项会自动选择算法:

      • 'unweighted' 用于没有边权重的 graph 和 digraph 输入。

      • 'positive' 用于具有边权重的所有 graph 输入,并要求权 重为非负数。此选项还用于具有非负边权重的 digraph 输 入。

      • 'mixed' 用于其边权重包含某些负值的 digraph 输入。图不能包含负循环。

    2. 'unweighted'

      • 广度优先计算,将所有边权重都视为 1。

    3. 'positive'

      • Dijkstra 算法,要求所有边权重均为非负数。

    4. 'mixed'(仅适用于 digraph)

      • 适用于有向图的 Bellman‐Ford 算法,要求图没有负循环。 尽管对于相同的问题,'mixed' 的速度慢于 'positive',但 'mixed' 更为通用,因为它允许某些边权重为负数。

  6. Matlab演示

    % 注意哦,Matlab中的图节点要从1开始编号,所以这里把0全部改为了9
    % 编号最好是从1开始连续编号,不要自己随便定义编号
    d = distances(G [,'Method',algorithm]) %此时出现的为矩阵
    [nodeIDs,dist] = nearest(G,s,d [,'Method',algorithm])
    %返回图形 G 中与节点 s 的距离在 d 之内的所有节点。
    %nodeIDs是符合条件的节点;Dist是这些节点与s的距离

     

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值