【离散数学】实践二 Floyd– Warshall算法

news2024/11/14 9:03:45

文章目录

  • 目标
  • 原理
  • 设计与实现(代码快照以及代码)
  • 运行界面和结果截图
  • 结语

目标

给定一个距离矩阵,利用 Floyd– Warshall 算法编程(C语言)求任意两点之间的最短距离。


原理

求取多源最短路径常用Floyd算法,通过对比直达距离和从各点中转距离之和相比,若采用中转的方式比直达距离短,则其就为当前最短路径。如:从地方A到地方B距离为5,A到C距离为2,C到B距离为2,在这种情况下可以从C中转到B,最短距离就是2 + 2 = 4。Floyd核心算法如下:

for (int i = 0; i < 4; i++)  
{  
    for (int j = 0; j < 4; j++)  
    {  
        for (int k = 0; k < 4; k++)  
        {  
            if (matrix[i][j] > matrix[i][k] + matrix[k][j])  
            {  
                matrix[i][j] = matrix[i][k] + matrix[k][j];  
            }  
        }  
    }  
}

设计与实现(代码快照以及代码)

在这里插入图片描述

#include <stdio.h>
// 输入一个4 * 4的矩阵
void input_matrix(int matrix[4][4])
{
    printf("若无法到达该点请输入10000\n");
    for (int i = 0; i < 4; i++)
    {
        printf("请输入第%d行数据\n", i + 1);
        scanf("%d %d %d %d", &matrix[i][0], &matrix[i][1], &matrix[i][2], &matrix[i][3]);
    }
}
// 输出Floyd最短路径矩阵
void output_matrix(int matrix[4][4])
{
    for (int i = 0; i < 4; i++)
    {
        for (int j = 0; j < 4; j++)
        {
            if (matrix[i][j] >= 10000)
                printf("*\t");
            else
                printf("%d\t", matrix[i][j]);
        }
        printf("\n");
    }
}

int main()
{
    int matrix[4][4];
    input_matrix(matrix);
    for (int k = 0; k < 4; k++)
    {
        for (int i = 0; i < 4; i++)
        {
            for (int j = 0; j < 4; j++)
            {
                if (matrix[i][j] > matrix[i][k] + matrix[k][j])
                    matrix[i][j] = matrix[i][k] + matrix[k][j];
            }
        }
    }
    output_matrix(matrix);
    return 0;
}

运行界面和结果截图

原矩阵
0 2 6 4 ∞ 0 3 ∞ 7 ∞ 0 1 5 ∞ 12 0 \begin{matrix} &0 &2 &6 &4 \\ &\infty &0 &3 &\infty \\ &7 &\infty &0 &1 \\ &5 &\infty &12 &0\\ \end{matrix} 0752063012410

经过Floyd算法计算后的矩阵
0 2 5 4 9 0 3 4 6 8 0 1 5 7 10 0 \begin{matrix} &0 &2 &5 &4 \\ &9 &0 &3 &4 \\ &6 &8 &0 &1 \\ &5 &7 &10 &0\\ \end{matrix} 09652087530104410
在这里插入图片描述


结语

如果有疑问欢迎大家留言讨论,你如果觉得这篇文章对你有帮助可以给我一个免费的赞吗?我们之间的交流是我最大的动力!


参考文献:只有五行的Floyd最短路径算法

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/732259.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

支持向量机SVM代码详解——多分类/降维可视化/参数优化【python】

篇1&#xff1a;SVM原理及多分类python代码实例讲解&#xff08;鸢尾花数据&#xff09; SVM原理 支持向量机&#xff08;Support Vector Machine,SVM&#xff09;&#xff0c;主要用于小样本下的二分类、多分类以及回归分析&#xff0c;是一种有监督学习的算法。基本思想是寻…

腾讯云对象存储的创建和S3 Browser的使用

简述 想想第一次接触对象存储的时候还是很兴奋的&#xff0c;同时也是一脸懵逼&#xff1b;然后开始网上疯狂的找资料&#xff0c;但因为客户当时给的文档写的是关于Amazon S3之类的&#xff0c;所以自以为的就只有Amazon S3这一家&#xff0c;接着开始查资料&#xff0c;经过一…

Spark学习---2、SparkCore(RDD概述、RDD编程(创建、分区规则、转换算子、Action算子))

1、RDD概述 1.1 什么是RDD RDD(Resilient Distributed Dataset)叫弹性分布式数据集&#xff0c;是Spark中对于分布式数据集的抽象。代码中是一个抽象类&#xff0c;它代表一个弹性的、不可变、可分区、里面的元素可并行计算的集合。 1.2 RDD五大特性 1、一组分区&#xff0…

Pyecharts 绘制各种统计图的案例

Pyecharts 绘制各种统计图的案例 基础使用 from pyecharts import options as opts from pyecharts.charts import Bar, Line, Pie, Scatter from pyecharts.faker import Faker# 柱状图示例 def bar_chart():x_data Faker.choose()y_data Faker.values()bar (Bar().add_xa…

simulink实战 建模 简单车辆动力学模型

Gmg Discrete-TimeIntegrator 离散时间积分器

CentOS 7 搭建 Impala 4.1.2 + Kudu 1.15.0 测试环境

安装依赖 这部分不过于详细介绍&#xff0c;如果有现成环境也可以直接拿来使用。 Java 下载 java 安装包&#xff0c;需要登录 oracle&#xff0c;请自行下载。 cd /mnt tar zxvf jdk-8u202-linux-x64.tar.gz配置环境变量到 /etc/bashrc&#xff0c;并执行 source /etc/bas…

关于深度学习图像数据增广

数据增广方法在广义上可以按照产生新数据的方式分为数据变形和数据过采样。由于操作简单&#xff0c;同时数据量上的需求远比现在要低得多&#xff0c;早期对数据增广的应用多是数据变形类方法。对于图像数据&#xff0c;基本的图像变换操作都属于数据变形类增广方法&#xff0…

Jvm参数设置-JVM(八)

上篇文章说了逃逸分析和标量&#xff0c;代码实例解析了内存分配先从eden区域开始&#xff0c;当内存不足的时候&#xff0c;才会进入s0和s1&#xff0c;发生yangGC&#xff0c;之后大内存会放入old&#xff0c;因为我们昨天程序运行了一个45M的对象&#xff0c;于是小对象在ed…

详解------>数组笔试题(必备知识)

目录 本章将通过列题进一步了解sizeof 与strlen的区别&#xff0c;加强对数组的理解。 1&#xff1a;一维数组列题 2&#xff1a;字符数组列题 3&#xff1a;二维数组列题 首先在进行这些习题讲解之前我们需要知道的知识点 sizeof&#xff1a;是一个关键字&#xff0c;可以…

KMP--高效字符串匹配算法(Java)

KMP算法 KMP算法算法介绍代码演示: KMP算法 KMP算法是为了解决这一类问题,给定一个字符串str1,和一个字符串str2,如果str2属于str1d的字串,则返回字串第一个出现位置的下标,不存在返回-1. 注意: 子串是连续的. 举个例子 str1 “abc123abs” str1 长度假设m str2 “123”; str2…

pycharm汉化

安装pycharm 不多说了&#xff0c;直接下载安装即可 汉化 file -setting plugins 输入chinese进行搜索 点击 进行安装&#xff0c;等待安装完成 安装完成需要重启&#xff0c;点击重启&#xff0c;等待重启完成即可 出现上图&#xff0c;说明汉化成功了

【计算机视觉】YOLOv8的测试以及训练过程(含源代码)

文章目录 一、导读二、部署环境三、预测结果3.1 使用检测模型3.2 使用分割模型3.3 使用分类模型3.4 使用pose检测模型 四、COCO val 数据集4.1 在 COCO128 val 上验证 YOLOv8n4.2 在COCO128上训练YOLOv8n 五、自己训练5.1 训练检测模型5.2 训练分割模型5.3 训练分类模型5.4 训练…

Mybatis-xml和动态sql

xml映射方式 除了之前那种 select(语句) public void ...();通过注解定义sql语句&#xff0c;还可以通过xml的方式来定义sql语句 注意 在resource创建的是目录&#xff0c;要用斜线分隔 创建出文件后 先写约束 <?xml version"1.0" encoding"UTF-8"…

第4集丨JavaScript 使用原型(prototype)实现继承——最佳实战2

目录 一、临时构造器方式1.1 代码实现1.2 代码分析 二. 增加uber属性&#xff0c;用于子对象访问父对象2.1 实现分析2.2 代码实现 三. 将继承封装成extend()函数3.1 代码实现3.1.1 临时构造器实现extend()3.1.2 原型复制实现extend2() 3.2 代码测试3.2.1 测试extend()函数3.2.1…

uniapp打包嵌入app,物理返回键的问题

问题描述&#xff1a;将uniapp开发的应用打包成wgt包放入app后&#xff0c;发现手机自带的返回键的点击有问题&#xff0c;比如我从app原生提供的入口进入了uniapp的列表页&#xff0c;然后我又进入了详情页&#xff0c;这时候在详情页点击物理返回键的话&#xff0c;它直接就返…

C语言—最大公约数和最小公倍数

作者主页&#xff1a;paper jie的博客_CSDN博客-C语言,算法详解领域博主 本文作者&#xff1a;大家好&#xff0c;我是paper jie&#xff0c;感谢你阅读本文&#xff0c;欢迎一建三连哦。 本文录入于《算法详解》专栏&#xff0c;本专栏是针对于大学生&#xff0c;编程小白精心…

过河卒

题目描述 棋盘上 A 点有一个过河卒&#xff0c;需要走到目标 B 点。卒行走的规则&#xff1a;可以向下、或者向右。同时在棋盘上 C 点有一个对方的马&#xff0c;该马所在的点和所有跳跃一步可达的点称为对方马的控制点。因此称之为“马拦过河卒”。 棋盘用坐标表示&#xff…

云同步盘 vs 普通网盘:选择哪种更适合你?区别解析与选购指南!

云同步盘是一种基于云存储的在线服务&#xff0c;主要用于将本地文件存储到云端&#xff0c;并通过客户端软件实现文件的自动同步&#xff0c;从而保持本地和云端文件的同步更新。用户可以在任何设备上访问和共享这些文件。 云同步盘和普通云盘都是云存储服务&#xff0c;可以让…

Kubernetes CoreDNS

Kubernetes CoreDNS 1、DNS服务概述 coredns github 地址&#xff1a; https://github.com/kubernetes/kubernetes/blob/master/cluster/addons/dns/coredns/coredns.yaml.base service 发现是 k8s 中的一个重要机制&#xff0c;其基本功能为&#xff1a;在集群内通过服务名…

TL-ER2260T获取SSH密码并登录后台

TL-ER2260T获取SSH密码并登录后台 首先需要打开诊断模式 打开Ubuntu&#xff0c;通过如下指令计算SSH密码&#xff0c;XX-XX-XX-XX-XX-XX是MAC地址echo -n "XX-XX-XX-XX-XX-XX" | tr -d - | tr [a-z] [A-Z] | md5sum | cut -b 1-16SSH登录ssh -oKexAlgorithmsdiffie…