Warshall算法求传递闭包及Python编程的实现
弗洛伊德算法-Floyd(Floyd-Warshall)-求多源最短路径,求传递闭包
Floyd算法又称为插点法,是一种利用动态规划的思想寻找给定的加权图中多源点之间最短路径的算法,
与Dijkstra算法类似。该算法名称以创始人之一、1978年图灵奖获得者、斯坦福大学计算机科学系教授罗伯特·弗洛伊德命名。
为什么要求传递闭包?
因为:一个有n个顶点的有向图的传递闭包为:有向图中的初始路径可达情况可以参见其邻接矩阵A,
邻接矩阵中A[i,j]表示i到j是否直接可达,若直接可达,则A[i,j]记为1,否则记为0;两个有向图
中i到j有路径表示从i点开始经过其他点(或者不经过其他点)能够到达j点,如果i到j有路径,
则将T[i,j]设置为1,否则设置为0;有向图的传递闭包表示从邻接矩阵A出发,求的所有节点
间的路径可达情况,该矩阵就为所要求的传递闭包矩阵
warshall传递闭包算法的目的:就是由邻接矩阵出发,进行探索求出最终的传递闭包

(i是行,j是列)
算法过程:
(1)i=1时,第一列有A[4,1]=1,将第四行元素分别与第一行对应元素进行
逻辑加(或运算):
0 1 0 0
0 0 0 1
0 0 0 0
1 1 1 0
(2)i=2时,第二列有A[1,2]=1,A[4,2]=1,将第一行元素和第四行元素分别与第二行
对应元素进行逻辑加:
0 1 0 1
0 0 0 1
0 0 0 0
1 1 1 1
(3)i=3时,第三列有A[4,3]=1,将第四行元素分别与第三行对应元素进行逻辑加:
0 1 0 1
0 0 0 1
0 0 0 0
1 1 1 1
(4)i=4时,第四列有A[1,4]=1,A[2,4]=1,A[4,4]=1,将第一行元素、第二行
元素和第四行元素分别与第四行对应元素进行逻辑加:
1 1 1 1
1 1 1 1
0 0 0 0
1 1 1 1

Python核心代码:
Matrix = [] #声明空矩阵
n = int(input('请输入矩阵阶数: \n')) #将输入的数字整型化赋给n
#获取矩阵关系
for i in range(n): #从0到n-1依次取值
Matrix.append(input('第{}行'.format(i+1)).split())
def logicadd(a,b):
#逻辑加(或运算)
if a==0 and b==0:
return 0
else:
return 1
#Walshall算法求传递闭包
for column in range(n): #从第一列到第n列[range()函数从0到n-1但是不影响算法]
for row in range(n): #从第一行到第n行[range()函数从0到n-1但是不影响算法]
#row的for循环在column的for循环的下面,在行数确定时,对相应列的所有元素进行遍历,变化的是row行数
if int(Matrix[row][column])==1: #判断第row行第column行的元素是否为1
for i in range(n): #计算n次
Matrix[row][i]=logicadd(int(Matrix[row][i]),int(Matrix[column][i]))
#将该行的所有元素与对应行的元素进行逻辑加运算,此处,因为行数与列数是相同的,所以用column固定值表示
print(Matrix)
#该算法的核心是:从矩阵的第一行开始,查看第一列的元素,如果有值为1,则将该1值所处的行数的所有元素与第一行的对应元素进行逻辑加运算;依次计算......

另外一种思想:
如果知道点数,知道边数以及边的方向,该如何求出传递闭包?
请思考:k阶应该在最里层,还是最外层,为什么? 如何体现 i->k 和 k->j的与?
map()函数的格式是:
map(function,iterable,...)
第一个参数接受一个函数名,后面的参数接受一个或多个可迭代的序列,返回的是一个集合。
把函数依次作用在list中的每一个元素上,得到一个新的list并返回。
用法:zeros(shape, dtype=float, order='C')
返回:返回来一个给定形状和类型的用0填充的数组;
shape:形状
dtype:数据类型,可选参数,默认numpy.float64
order:可选参数,c代表与c语言类似,行优先;F代表列优先
range(10)表示: range(0, 10)
python编程代码如下:
import numpy as np
def Warshall(A,n):
for k in range(n):
for i in range(n):
for j in range(n):
A[i][j] = A[i][j] or (A[i][k] and A[k][j]) #k-1阶的时候,A[i,j]如果是1,那么就似乎A[i,j] = A[i,j],如果A[i,j]是0,再看 A[i,j] = A[i,k] and A[k,j]
return A #i相当于1,k相当于2,j相当于3;若有从1到3的直接路径,则覆盖。若只有从1到2再到3的间接路径,则取后面的间接路径,间接路径成立的条件是从1到2和从2到3都成立,所以是and

n,m=map(int,input("请输入点数n和边数m:").split()) #将点数和边数整型化后赋给n,m
A=np.zeros((n,n),dtype=np.int32)
for i in range(0,m): #同range(m)
a,b=map(int,input("请输入有向边的顶点a->b:").split()) #将有向边的顶点数字整型化后赋给a,b
A[a-1][b-1]=1
print("邻接矩阵为: \n",A)
print("最终的传递闭包为: \n",Warshall(A,n))

相关文章:
Warshall算法求传递闭包及Python编程的实现
弗洛伊德算法-Floyd(Floyd-Warshall)-求多源最短路径,求传递闭包 Floyd算法又称为插点法,是一种利用动态规划的思想寻找给定的加权图中多源点之间最短路径的算法, 与Dijkstra算法类似。该算法名称以创始人之一、1978年图灵奖获得者、斯坦福大…...
AcWing第 93 场周赛
4867. 整除数 给定两个整数 n,k,请你找到大于 n 且能被 k 整除的最小整数 x。 输入格式 共一行,包含两个整数 n,k。 输出格式 输出大于 n 且能被 k 整除的最小整数 x。 数据范围 前 4 个测试点满足 1≤n,k≤100。 所有测试点满足 1≤n,k≤109。 …...
计及需求响应的粒子群算法求解风能、光伏、柴油机、储能容量优化配置(Matlab代码实现)
👨🎓个人主页:研学社的博客💥💥💞💞欢迎来到本博客❤️❤️💥💥🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密…...
利用Nginx给RStudio-Server配置https
前篇文档,我这边写了安装RStudio-Server的方法。默认是http的访问方式,现在我们需要将其改成https的访问方式。 1、给服务器安装Nginx:参照之前的安装Nginx的方法。 2、创建/usr/local/nginx/ssl目录: mkdir /usr/local/nginx/ss…...
YOLOv7实验记录
这篇博客主要记录博主在做YOLOv7模型训练与测试过程中遇到的一些问题。 首先我们需要明确YOLO模型权重文件与模型文件的使用 其实在github的readme中已经告诉我们使用方法,但我相信有很多像博主一样眼高手低的人可能会犯类似的错误。 训练 首先是训练时的设置&…...
用Python获取史瓦西时空中克氏符的分量
文章目录三维球面坐标史瓦西时空三维球面坐标 Einsteinpy中提供了克氏符模型,可通过ChristoffelSymbols获取。简单起见,先以最直观的三维球面为例,来用Einsteinpy查看其克氏符的表达形式。 三维球面的度规张量可表示为 g001g11r2g22r2sin…...
QML编码约定
QML中的国际化: QML使用以下函数来将字符串标记为可翻译的 qsTr()qsTranslate()qsTrld()QT_TR_NOOP()QT_TRANSLATE_NOOP()QT_TRID_NOOP最常用的还是qsTr() string qsTr(string sourceText, string disambiguation&…...
【Linux】安装Linux操作系统具体步骤
1). 选择创建新的虚拟机 2). 选择"典型"配置 3). 选择"稍后安装操作系统(S)" 4). 选择"Linux"操作系统,"CentOS7 64位"版本 5). 设置虚拟机的名称及系统文件存放路径 6). 设置磁盘容量 7). 自定义硬件信息 8). 启动上述创建的新虚拟机…...
前端ES6异步编程技术——Promise使用
Promise是什么 官方的定义是:Promise是ES6新推出的用于进行异步编程的解决方案,旧方案是单纯使用回调函数来解决的。对于开发人员来说,我们把promise当作一个普通的对象即可,使用它可以用来封装一个异步操作并可以获取其成功/失败…...
Kotlin实现简单的学生信息管理系统
文章目录一、实验内容二、实验步骤1、页面布局2、数据库3、登录活动4、增删改查三、运行演示四、实验总结五、源码下载一、实验内容 根据Android数据存储的内容,综合应用SharedPreferences和SQLite数据库实现一个用户信息管理系统,强化对SharedPreferen…...
413. 等差数列划分
413. 等差数列划分 如果一个数列 至少有三个元素 ,并且任意两个相邻元素之差相同,则称该数列为等差数列。 例如,[1,3,5,7,9]、[7,7,7,7] 和 [3,-1,-5,-9] 都是等差数列。 给你一个整数数组 nums ,返回数组 nums 中所有为等差数…...
设计模式七大原则
一、设计模式概念 1.1 软件设计模式的产生背景 "设计模式"最初并不是出现在软件设计中,而是被用于建筑领域的设计中。 1977年美国著名建筑大师、加利福尼亚大学伯克利分校环境结构中心主任克里斯托夫亚历山大(Christopher Alexander&#x…...
【Mybatis系列】Mybatis常见的分页方法以及源码理解
Mybatis-Plus的selectPage 引入依赖 <dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>3.5.1</version></dependency>添加分页插件 Configuration public class My…...
Java面向对象:多态特性的学习
本文介绍了Java面向对象多态特性, 多态的介绍. 多态的实现条件–1.发生继承.2.发生重写(重写与重载的区别)3.向上转型与向下转型.4.静态绑定和动态绑定5. 实现多态 举例总结多态的优缺点 避免在构造方法内调用被重写的方法… Java面向对象:多态特性的学习一.什么是多态?二.多态…...
id函数 / 可变类型变量 / 不可变类型变量 / +=操作
前言 再说正文之前,需要大家先了解一下对象,指针和引用的含义,不懂得同学可以参考我上一篇博客“(12条消息) 引用是否有地址的讨论的_xx_xjm的博客-CSDN博客” 正文 一:python中一切皆对象 “python中一切皆对象”这句话我相信…...
aws apigateway 使用apigateway集成lambda
参考资料 代理集成,https://docs.aws.amazon.com/zh_cn/apigateway/latest/developerguide/api-gateway-create-api-as-simple-proxy-for-lambda.html非代理集成,https://docs.aws.amazon.com/zh_cn/apigateway/latest/developerguide/getting-started-…...
Linux SPI 驱动实验
目录 一、Linux 下 SPI 驱动框架简介 1、SPI 主机驱动 2、SPI 设备驱动 SPI 设备数据收发处理流程 3、SPI 设备和驱动匹配过程 二、添加SPI 设备信息 1、添加 ICM20608 所使用的 IO 2、 在 ecspi3 节点追加 icm20608 子节点 三、编写 ICM20608 驱动 1、修改makefile…...
[1.4]计算机系统概述——操作系统的体系结构
第一章 计算机系统概述 操作系统的体系结构 大内核/单内核/宏内核微内核 通过之前的学习,我们知道计算机系统的层次结构是这样的。 但是操作系统的内部其实还可以再进一步地划分。 一部分是内核的功能,一部分是非内核的功能。 操作系统最核心的功能&…...
FPGA的GigE Vision IP相机图像采集方案设计,转换为千兆UDP,支持10G MAC
1 概述 GigE Vision是一个比较复杂的协议,要在FPGA中完全实现具有较大的难度。如果FPGA作为接收端希望实现GigE Vision相机的配置和图像采集功能,则只需要实现其中小部分功能即可。本文对原有GigE Vision协议的结构进行了裁剪,仅保留设备搜索…...
大数据相关面试题
linux 常见linux高级命令? top、iotopnetstatdf -hjmap -heaptarrpmps -efshell 用过的shell工具? awk Awk 命令详解 - 简书 awk是行处理器: 相比较屏幕处理的优点,在处理庞大文件时不会出现内存溢出或是处理缓慢的问题,通常用来…...
DAMO-YOLO在Vue前端项目中的实时检测应用
DAMO-YOLO在Vue前端项目中的实时检测应用 1. 引言 想象一下,你正在开发一个智能安防系统,需要在网页上实时检测监控视频中的人员和车辆。传统的方案是将视频流发送到服务器处理,但网络延迟和隐私问题让人头疼。有没有可能在用户的浏览器里直…...
CBAM实战指南:如何通过通道与空间注意力提升CNN模型性能
1. 为什么你的CNN模型需要CBAM注意力模块 如果你正在使用卷积神经网络(CNN)处理图像分类任务,可能会遇到这样的困境:模型在训练集上表现不错,但测试集准确率始终卡在一个瓶颈。这时候不妨试试CBAM(Convolu…...
告别Node版本混乱!用NVM管理多项目环境(Mac保姆级指南+Zsh配置)
告别Node版本混乱!用NVM管理多项目环境(Mac保姆级指南Zsh配置) 在开发过程中,你是否遇到过这样的场景:接手一个老项目时,发现它依赖Node.js 12.x版本,而新项目却要求使用18.x甚至更高版本&#…...
电容耦合等离子刻蚀(CCP)在先进芯片制造中的关键作用与工艺优化
1. 电容耦合等离子刻蚀(CCP)技术解析 第一次接触CCP刻蚀设备时,我被它那看似简单却暗藏玄机的结构震撼到了——两块金属电极板,加上射频电源,就能实现纳米级的精密加工。这种利用电容耦合原理产生等离子体的技术&#…...
Qwen-Image-2512-Pixel-Art-LoRA 模型原理浅析:理解LoRA在图像生成中的作用
Qwen-Image-2512-Pixel-Art-LoRA 模型原理浅析:理解LoRA在图像生成中的作用 最近在玩AI画图的朋友,可能都遇到过这样的烦恼:想让一个通用的大模型画出特定风格,比如复古的像素风,结果要么画得不像,要么就得…...
换掉 Notepad++,事实证明它更牛逼!
提到文本编辑工具,大家肯定第一时间想到的是 Notepad 。Notepad 是一种流行的源代码编辑器,也是 Windows 用户的可靠记事本替代品。它是一个功能强大的实用程序,可在不占用大量存储空间的情况下提供最佳性能。不幸的是,它不适用于…...
告别Keil5刺眼白屏!保姆级教程教你配置VS Code同款暗黑主题(附3套配色方案)
Keil5暗黑主题终极改造指南:从护眼原理到深度定制 凌晨三点的实验室里,显示屏刺眼的白光让我的眼球开始灼烧般疼痛——这是许多嵌入式开发者共同的噩梦。Keil5作为单片机开发的主流工具,其默认的亮色主题在长时间编码时带来的视觉负担远超你的…...
PyTorch张量操作实战:从基础运算到CNN应用
1. PyTorch张量基础:从概念到创建 第一次接触PyTorch张量时,我完全被各种术语搞晕了。什么标量、向量、矩阵,还有这个奇怪的"张量"词。后来才发现,其实张量就是多维数组的另一种说法,只不过在深度学习中我们…...
Flutter文件操作实战:File_selector跨平台文件处理从入门到精通
1. 为什么Flutter开发者都需要掌握File_selector? 在移动应用和桌面应用开发中,文件操作就像我们日常生活中的"文件柜"——你需要存放、查找、整理各种文档。而Flutter作为跨平台框架,最大的挑战就是如何在不同操作系统上实现统一的…...
HY-MT1.5-1.8B功能体验:格式保留翻译,完美处理srt字幕和网页标签
HY-MT1.5-1.8B功能体验:格式保留翻译,完美处理srt字幕和网页标签 1. 引言:翻译模型的新挑战 在全球化内容爆炸式增长的今天,传统翻译工具面临两大核心痛点: 格式丢失问题:翻译srt字幕、HTML网页等内容时…...
