[数学建模]图论之最短路径问题

这篇具有很好参考价值的文章主要介绍了[数学建模]图论之最短路径问题。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

一、引入图论

 二、图的基本概念与数据结构

1.基本概念

 2.图与网络结构

1.邻接矩阵表示法

 2.稀疏矩阵表示法

三、最短路径问题

1、迪杰斯特拉(Dijkstra)算法

2、贝尔曼-福特(Bellman-Ford)算法

3、弗洛伊德(Floyd)算法


一、引入图论

        图论起源于18世纪,近几十年来,计算机技术与科学的飞速发展,大大促进了图论的研究与应用,图论的理论和方法已经渗透到物理、化学、通信科学、建筑学、运筹学、生物遗传学、心理学、经济学、社会学等学科中。
        图论所谓的“图”是指某类具体事物和这些事物之间的联系。如果用点表示这些具体事物,用连接两点的线段(直的或者曲的)表示这两个事物的特定的联系,就得到了描述这个“图”的几何形象。图论为任何一个包含了一种二元关系的离散系统提供了一个数学模型,借助于图论的概念、理论和方法,可以对该模型求解。哥尼斯堡七桥问题就是一个典型的例子。在哥尼斯堡有七座桥将普莱格尔河中的两个岛及岛与河岸联结起来,问题是要从这四块陆地中的任何一块开始通过每一座桥正好一次,再回到起点。

[数学建模]图论之最短路径问题

        当然可以通过试验去尝试解决这个问题,但该城居民的任何尝试均未成功。欧拉为了解决这个问题,采用了建立数学模型的方法。他将每一块陆地用一个点来代替,将每一座桥用连接相应两点的一条线来代替,从而得到一个有四个“点”、七条“线”的“图”。问题成为从任一点出发一笔画出七条线再回到起点。欧拉考察了一般一笔画的结构特点,给出了一笔画的一个判定法则,得到了“不可能走通”的结果,不但彻底解决了这个问题,而且开创了图论研究的先河。


 二、图的基本概念与数据结构

1.基本概念

        直观地讲,对于平面上的n个点,把其中的一些点对用曲线或直线连接起来,不考虑点的位置与连线曲直长短,这样形成的一个关系结构就是一个图。记成G=(V,E),V是以上述点为元素的顶点集,E是以上述连线为元素的边集。
        各条边都加上方向的图称为有向图,否则称为“无向图”。如果有的边有方向,有的边无方向,则称为混合图
        任两顶点间最多有一条边,且每条边的两个端点皆不重合的图,称为简单图
        如果图的两顶点间有边相连,则称此两顶点相邻,每一对顶点都相邻的图称为完全图,否则称为非完全图,完全图记为K|v|。

[数学建模]图论之最短路径问题

 2.图与网络结构

[数学建模]图论之最短路径问题

1.邻接矩阵表示法

[数学建模]图论之最短路径问题[数学建模]图论之最短路径问题

 2.稀疏矩阵表示法

[数学建模]图论之最短路径问题

[数学建模]图论之最短路径问题


三、最短路径问题

数模新版视频课程第8讲.图论最短路径问题_数学建模学习交流的博客-CSDN博客数模新版视频课程第8讲.图论最短路径问题https://blog.csdn.net/qq_32589267/article/details/99701702?spm=1001.2014.3001.5502

1、迪杰斯特拉(Dijkstra)算法

【不想整理了】

2、贝尔曼-福特(Bellman-Ford)算法

【不想整理了】

3、弗洛伊德(Floyd)算法

[数学建模]图论之最短路径问题

[数学建模]图论之最短路径问题

[数学建模]图论之最短路径问题[数学建模]图论之最短路径问题

function [dist,path] = Floyd_algorithm(D)
%% 该函数用于求解一个权重邻接矩阵任意两个节点之间的最短路径
% 输入:
%        D是权重邻接矩阵
% 输出:
%        dist是最短距离矩阵,其元素dist_ij表示表示i,j两个节点的最短距离
%        path是路径矩阵,其元素path_ij表示起点为i,终点为j的两个节点之间的最短路径要经过的节点

n = size(D,1);  % 计算节点的个数

% 初始化dist矩阵
dist = D;

% 下面我们来初始化path矩阵
path = zeros(n);
for j = 1:n
    path(:,j) = j;   % 将第j列的元素变为j
end
for i = 1:n
    path(i,i) = -1;  % 将主对角线元素变为-1
end

% 下面开始三个循环
for k=1:n    % 中间节点k从1- n 循环
   for i=1:n     % 起始节点i从1- n 循环
      for j=1:n    % 终点节点j从1-n 循环
          if dist(i,j)>dist(i,k)+dist(k,j)  % 如果i,j两个节点间的最短距离大于i和k的最短距离+k和j的最短距离
             dist(i,j)=dist(i,k)+dist(k,j);  % 那么我们就令这两个较短的距离之和取代i,j两点之间的最短距离
             path(i,j)=path(i,k);   % 起点为i,终点为j的两个节点之间的最短路径要经过的节点更新为path(i,k)
             % 注意,上面一行语句不能写成path(i,j) = k; 这是网上很多地方都容易犯的错误,在PPT11页中会告诉大家为什么不能这么写
          end
      end
   end
end

end



% %清风代码

[数学建模]图论之最短路径问题

%code1.m
% 首先将图转换为权重邻接矩阵D
n = 5;  %一共五个节点
D = ones(n) ./ zeros(n);  % 全部元素初始化为Inf
for i = 1:n
    D(i,i) = 0;  % 主对角线元素为0
end
D(1,2) = 3;
D(1,3) = 8;
D(1,5) = -4;
D(2,5) = 7;
D(2,4) = 1;
D(3,2) = 4;
D(4,3) = -5;
D(5,4) = 6;
D(4,1) = 2;

%% 调用Floyd_algorithm函数求解
[dist,path] = Floyd_algorithm(D)

print_path(path,dist,1,5)
print_path(path,dist,1,4)
print_path(path,dist,3,1)

clc
disp('下面我们打印任意两点之间的最短距离:')
print_all_path(D)

% %清风视频文件

[数学建模]图论之最短路径问题

function [] = print_path(path,dist,i,j)
%% 该函数的作用是打印从i到j经过的最短路径
% 输入:
%        path是使用floyd算法求出来的路径矩阵
%        dist是使用floyd算法求出来的最短距离矩阵
%        i是起始节点的编号
%        j是终点节点的编号
% 输出:无

if i == j
    warning('起点和终点相同,请检查后重新输入')  % 在屏幕中提示警告信息
    return;  % 不运行下面的语句,直接退出函数
end
if path(i,j) == j   % 如果path(i,j) = j,则有两种可能:
% (1)如果dist(i,j) 为 Inf , 则说明从i到j没有路径可以到达
    if dist(i,j) == Inf
        disp(['从',num2str(i),'到',num2str(j),'没有路径可以到达'])
% (2)如果dist(i,j) 不为 Inf , 则说明从i到j可直接到达,且为最短路径
    else
        disp(['从',num2str(i),'到',num2str(j),'的最短路径为'])
        disp([num2str(i),' ---> ',num2str(j)])
        disp(['最短距离为',num2str(dist(i,j))])
    end
else  % 如果path(i,j) ~= j,则说明中间经过了其他节点:
    k = path(i,j);
    result = [num2str(i),' ---> '];  % 初始化要打印的这个字符串
    while k ~= j  % 只要k不等于j, 就一直循环下去
        result = [result , num2str(k) , ' ---> ' ];  % i先走到k这个节点处
        k = path(k,j);
    end
    result = [result , num2str(k)];
    disp(['从',num2str(i),'到',num2str(j),'的最短路径为'])
    disp(result)
    disp(['最短距离为',num2str(dist(i,j))])
end

end

% % 清风数学建模学习交流

[数学建模]图论之最短路径问题

[数学建模]图论之最短路径问题

function [] = print_all_path(D)
%% 该函数的作用是求解一个权重邻接矩阵任意两个节点之间的最短路径,并打印所有的结果出来
% 输入:
%        D是权重邻接矩阵
% 输出:无

[dist,path] = Floyd_algorithm(D);   % 调用之前的Floyd_algorithm函数
n = size(D,1);
if n == 1
    warning('请输入至少两阶以上的权重邻接矩阵')   % 在屏幕中提示警告信息
    return;   % 不运行下面的语句,直接退出函数
end

for i = 1:n
    for j = 1:n
        if i ~= j  % 不等号用~=表示
            print_path(path,dist,i,j);   % 调用之前的print_path函数
            disp('-------------------------------------------')
            disp('  ')
        end
    end
end

end


% % 清风数学建模课程


摘抄【仅作为自己回忆笔记】:

1、【课本】司守奎 《数学建模算法与应用》 第二版

2、清风数学建模课程。文章来源地址https://www.toymoban.com/news/detail-460301.html

到了这里,关于[数学建模]图论之最短路径问题的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 图论(二)之最短路问题

    栗题 https://www.acwing.com/problem/content/851/ https://www.acwing.com/problem/content/852/ 思想 迪杰斯特拉算法采用的是一种贪心的策略。 求源点到其余各点的最短距离步骤如下: 用一个 dist 数组保存源点到其余各个节点的距离,dist[i] 表示源点到节点 i 的距离。初始时,dist 数组的各个元素

    2024年04月13日
    浏览(37)
  • 集货运输优化:数学建模步骤,Python实现蚁群算法(解决最短路径问题), 蚁群算法解决旅行商问题(最优路径问题),节约里程算法

    目录 数学建模步骤 Python实现蚁群算法(解决最短路径问题)  蚁群算法解决旅行商问题(最优路径问题)

    2024年02月09日
    浏览(57)
  • 【数学建模】图论模型

    无向图和有向图 简单图和完全图:重边、环、孤立点 赋权图/网络 顶点的度 子图与生成子图 路与回路、迹、path、圈 连通图与非连通图 图的表示 考虑简单图 关联矩阵表示 邻接矩阵表示 对于赋权图而言,邻接矩阵中的数值改为对应边的权值就得到对应的无向/有向赋权图

    2024年01月17日
    浏览(54)
  • 数学建模——图论学习

    一、图论基础 图分为有限图与无限图两类,本课只涉及有限图,即顶点和边都是有限集合 (2)有向图:每一条边都是有向的 无向图:每一条边都是无向的 除外都是混合图  注意:有向图边的描述{1.每一条边都需要描述到   2.始点,终点 (3)邻接点:两个结点之间有一条边

    2024年02月04日
    浏览(46)
  • 【数学建模常用模型】图论专题

            图论是研究点、线间关系的一门学科。现实生活中,凡是涉及到事物间的关系,都可以抽象为图论模型。图论模型也是各大数学建模中常见的一种模型,主要用于计算、规划最短距离、路线等问题。下面介绍几个基本概念和算法。   单源最短路         单源最短路

    2024年02月06日
    浏览(41)
  • 《python数学实验与建模》(10)图论模型

    10.1 写出图10.20所示非赋权无向图的关联矩阵和邻接矩阵 绘制图 10.2 计算图10.21所示赋权无向图中从 v 1 到 v 5 v_1到v_5 v 1 ​ 到 v 5 ​ 的最短路径和最短距离 绘制图 求解任意两点的最短路 10.3 求图10.21 所示赋权无向图的最小生成树 10.4 已知有6个村子,互相间道路的距离如图1

    2024年02月05日
    浏览(43)
  • 图论及其应用(基础知识)(1)(数学建模基础速成)

    能否从任一陆地出发通过每座桥恰好一次而 回到出发点? 你要是自己做过,就会显而易见的发现这道题是 没有答案 的(遵守规则以及图形规定的情况下) 欧拉就这个问题说过: 如果每块陆地所连接的桥都是 偶数 座,则从任一陆地出发,必能通过每座桥恰好一次而回到出

    2023年04月08日
    浏览(40)
  • 图论在数学建模中的应用及MATLAB实现

    目录 图论基本概念 图论原理 1. 最短路径问题

    2024年02月08日
    浏览(42)
  • 数学建模 优化问题——数学规划

    优化问题 :在一系列客观或主观限制条件下,寻求使所关注的某个或多个指标达到最大(或最小)的决策 结构设计、资源分配、生产计划、运输方案中经常可见 通常的解决手段: 经验积累、主观判断 做试验、比优劣 建立数学模型,求解最优策略 解决优化问题的数学方法: 数

    2024年02月06日
    浏览(54)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包