算法——图论——最短路径——Floyd / 传递闭包

目录

 Floyd-Warshall(弗洛伊德)算法

传递闭包

一、试题 算法训练 盾神与离散老师2 


 

 Floyd-Warshall(弗洛伊德)算法

  • 求所有顶点到所有顶点的最短路径问题
  • 弗洛伊德算法(Floyd-Warshall algorithm)是一种用于寻找图中所有顶点对之间最短路径的动态规划算法。
  • 该算法可以处理带有负权边但不含负权环的加权有向图或无向图。
  • 弗洛伊德算法的核心思想是利用三重循环遍历所有顶点,逐步更新每对顶点之间的最短路径的信息。

弗洛伊德算法的示例代码:

import java.util.Arrays;public class FloydWarshall {public static void main(String[] args) {int INF = 99999; // 表示无穷大int[][] graph = {{0, 5, INF, 10},{INF, 0, 3, INF},{INF, INF, 0, 1},{INF, INF, INF, 0}};floydWarshall(graph);}public static void floydWarshall(int[][] graph) {int V = graph.length;int[][] dist = new int[V][V];// 初始化距离矩阵为图的邻接矩阵for (int i = 0; i < V; i++) {for (int j = 0; j < V; j++) {dist[i][j] = graph[i][j];}}// 迭代更新距离矩阵for (int k = 0; k < V; k++) {for (int i = 0; i < V; i++) {for (int j = 0; j < V; j++) {if (dist[i][k] + dist[k][j] < dist[i][j]) {dist[i][j] = dist[i][k] + dist[k][j];}}}}// 打印最短路径距离printSolution(dist);}public static void printSolution(int[][] dist) {int V = dist.length;System.out.println("距离矩阵:");for (int i = 0; i < V; ++i) {for (int j = 0; j < V; ++j) {if (dist[i][j] == 99999) {System.out.print("INF ");} else {System.out.print(dist[i][j] + " ");}}System.out.println();}}
}

传递闭包

  • 给定一个集合,以及若干对元素之间的传递关系,传递闭包问题是求所有元素之间的传递(连通)关系。
  • 例如,包括3个元素的集合{a,b,c},给定传递关系a-->b, b-->c,那么可推导出a-->c
  • 用Floyd算法解决传递闭包问题
  • 可用bitset优化复杂度

传递闭包的示例代码:

    // 使用Floyd算法计算最短路径for (int k = 1; k <= n; k++) {for (int i = 1; i <= n; i++) {for (int j = 1; j <= n; j++) {// 如果经过节点k可以从节点i到达节点j,则更新传递闭包矩阵if (matrix[i][k] == 1 && matrix[k][j] == 1) {matrix[i][j] = 1;}}}}

一、试题 算法训练 盾神与离散老师2 

问题描述
  有一天,盾神觉得自己离散课快要挂了,于是亲自找到离散老师WH,请教如何才能不挂科。WH老师说,只要你做出下面那题,你就可以不挂了!但是盾神不会做T_T只能请教你了。
  有N个人,i和j可能认识,可能不认识。i一定认识i。如果i认识j,j不一定认识i。但是如果i认识j,j认识k,i必定认识k。给出目前掌握的N个人互相的认识关系,求用已知的关系推断出来的N个人互相的人事关系。
输入格式
  输入第一行为一个数N。
  接下来是一个N*N的矩阵,第i行第j个数是1的话表示i认识j,0的话表示i不一定认识j。不会出现除0和1之外的其他数。数与数之间用一个空格隔开。第i行第i列不一定是1。
输出格式
  输出一个N*N的矩阵,第i行第j列的意思如输入。数与数之间用一个空格隔开。第i行第i列必须是1。
样例输入
  3
  0 1 0
  0 0 1
  0 0 0
样例输出
  1 1 1
  0 1 1
  0 0 1
数据规模和约定
  N<=500

分析:

  •  使用Floyd算法解决,套用代码即可
  • 一个三重for循环
package no1_1;
import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner scanner = new Scanner(System.in);int n = scanner.nextInt();int[][] matrix = new int[n+1][n+1];for (int i = 1; i <= n; i++) {scanner.nextLine();for (int j = 1; j <= n; j++) {matrix[i][j] = scanner.nextInt();if(i == j) {//自己一定认识自己matrix[i][j] = 1;}}}// 使用多重循环直接更新矩阵中的间接关系for (int k = 1; k <= n; k++) {for (int i = 1; i <= n; i++) {for (int j = 1; j <= n; j++) {if (matrix[i][j] == 0 && matrix[i][k] == 1 && matrix[k][j] == 1) {matrix[i][j] = 1;}}}}//打印矩阵for (int i = 1; i <= n; i++) {for (int j = 1; j <= n; j++) {System.out.print(matrix[i][j] + " ");}System.out.println();}}
}

 

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

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

相关文章

《白话C++》第9章 泛型,Page842~844 9.4.2 AutoPtr

源起&#xff1a; C编程中&#xff0c;最容易出的问题之一&#xff0c;就是内存泄露&#xff0c;而new一个对象&#xff0c;却忘了delete它&#xff0c;则是造成内存泄露的主要原因之一 例子一&#xff1a; void foo() {XXXObject* xo new XXXObject;if(!xo->DoSomethin…

Web项目利用MybatisPlus进行分页查询

之前在写博客系统前台页面的时候&#xff0c;遇到了利用mp进行分页查询的情况&#xff0c;由于涉及到的知识点相对较为重要&#xff0c;固写一篇博客以此巩固。 一、功能需求 在首页和分类页面都需要查询文章列表。 首页&#xff1a;查询所有的文章分类页面&#xff1a;查询…

[计算机网络]---序列化和反序列化

前言 作者&#xff1a;小蜗牛向前冲 名言&#xff1a;我可以接受失败&#xff0c;但我不能接受放弃 如果觉的博主的文章还不错的话&#xff0c;还请点赞&#xff0c;收藏&#xff0c;关注&#x1f440;支持博主。如果发现有问题的地方欢迎❀大家在评论区指正 目录 一、再谈协议…

第8讲项目整合SpringSecurity

pom.xml加下springsecurity依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-security</artifactId> </dependency>SecurityConfig配置文件&#xff1a; package com.java1234.config;imp…

【NLP】MHA、MQA、GQA机制的区别

Note LLama2的注意力机制使用了GQA。三种机制的图如下&#xff1a; MHA机制&#xff08;Multi-head Attention&#xff09; MHA&#xff08;Multi-head Attention&#xff09;是标准的多头注意力机制&#xff0c;包含h个Query、Key 和 Value 矩阵。所有注意力头的 Key 和 V…

牛客2024年除夕娱乐赛(题解)

比赛地址 : 牛客竞赛_ACM/NOI/CSP/CCPC/ICPC算法编程高难度练习赛_牛客竞赛OJ A 看题面然后猜!!! #include<bits/stdc.h> using namespace std; int main(){cout << "原神启动" << endl; } B 也是看题面然后猜 : #include<bits/stdc.…

springboot189基于SpringBoot电商平台的设计与实现

简介 【毕设源码推荐 javaweb 项目】基于springbootvue 的 适用于计算机类毕业设计&#xff0c;课程设计参考与学习用途。仅供学习参考&#xff0c; 不得用于商业或者非法用途&#xff0c;否则&#xff0c;一切后果请用户自负。 看运行截图看 第五章 第四章 获取资料方式 **项…

macOS Sonoma 14.4beta3(23E5196e)发布【附黑/白苹果镜像】

系统介绍 黑果魏叔2 月 14 日消息&#xff0c;苹果今日向 Mac 电脑用户推送了 macOS 14.4 开发者预览版 Beta 3 更新&#xff08;内部版本号&#xff1a;23E5196e&#xff09;&#xff0c;本次更新距离上次发布隔了 7 天。 魏叔查询支持文档&#xff0c;发现 macOS 14.4 Beta…

安全基础~通用漏洞5

文章目录 知识补充CSRFSSRFxss与csrf结合创建管理员账号 知识补充 NAT&#xff1a;网络地址转换&#xff0c;可以将IP数据报文头中的IP地址转换为另一个IP地址&#xff0c;并通过转换端口号达到地址重用的目的。即通过将一个外部IP地址和端口映射更大的内部IP地址集来转换IP地…

ICLR 2023#Learning to Compose Soft Prompts for Compositional Zero-Shot Learning

组合零样本学习&#xff08;CZSL&#xff09;中Soft Prompt相关工作汇总&#xff08;一&#xff09; 文章目录 组合零样本学习&#xff08;CZSL&#xff09;中Soft Prompt相关工作汇总&#xff08;一&#xff09;ICLR 2023#Learning to Compose Soft Prompts for Compositional…

嵌入式培训机构四个月实训课程笔记(完整版)-Linux ARM驱动编程第五天-ARM Linux编程之file_operations详解 (物联技术666)

链接&#xff1a;https://pan.baidu.com/s/1V0E9IHSoLbpiWJsncmFgdA?pwd1688 提取码&#xff1a;1688 struct file_operations{ struct module *owner; // 指向拥有该结构的模块的指针&#xff0c;避免正在操作时被卸载&#xff0c;一般为初始化THIS_MODULES loff_t &#…

透光卓越,光耦继电器的独特特点全面解析

光耦继电器作为电子控制系统中的核心元件&#xff0c;其光电隔离技术为其独特之处。通过光电隔离技术&#xff0c;光耦继电器实现了输入和输出之间的电气隔离&#xff0c;有效阻止了高电压与低电压之间的直接接触。这项技术不仅提高了系统的安全性&#xff0c;还有效减少了电气…

Vue练习1:组件开发1(头像组件)

样式预览 注释代码 <template><div class"img-box":style"{ //动态style必须为对象width: size rem,height: size rem}"><imgclass"avatar-img":src"url" //动态url/></div> </templ…

【DDD】学习笔记-聚合设计原则

聚合设计原则 对比对象图和聚合&#xff0c;我们认为引入聚合的目的是控制对象之间的关系&#xff0c;这实则是引入聚合的技术原因。领域驱动设计引入聚合&#xff08;Aggregate&#xff09;来划分对象之间的边界&#xff0c;在边界内保证所有对象的一致性&#xff0c;并在对象…

C语言从零实现贪吃蛇小游戏

制作不易&#xff0c;点赞关注一下呗&#xff01;&#xff01;&#xff01; 文章目录 前言一. 技术要点二、WIN32API介绍三、贪吃蛇游戏设计与分析 1.游戏开始前的初始化 2.游戏运行的逻辑 总结 前言 当我们掌握链表这样的数据结构之后&#xff0c;我们就可以用它来…

比特币 P2PKH、P2SH

标准脚本P2PKH、P2SH 区块链重要基础知识7-1——标准脚本P2PKH、P2SH-CSDN博客 比特币中P2SH(pay-to-script-hash)多重签名的锁定脚本和解锁脚本 https://www.cnblogs.com/itlgl/p/10419325.html

wayland(xdg_wm_base) + egl + opengles 使用FBO渲染到纹理实例(六)

文章目录 前言一、FBO介绍1. FBO 简介2. FBO的关键组成部分3. FBO的基本工作流程4. FBO 实现渲染到纹理5. FBO 实现离屏渲染二、FBO 实现渲染到纹理的代码实例1. egl_wayland_texture3_2.c2. xdg-shell-client-protocol.h 和 xdg-shell-protocol.c3. 编译4. 运行总结参考资料前…

京东护网面试题汇总

1 、JNI 函数在 java 中函数名为 com.didi.security.main,C 中的函数名是什么样的&#xff1f; com_didi_security_mian java.com.didi.security.main 2 、Frida 和 Xposed 框架&#xff1f; 3 、SSRF 利用方式&#xff1f; 4 、宏病毒&#xff1f; 5 、APP 加壳&a…

黑群晖一键修复:root、AME、DTS、转码、CPU型号等

食用方法&#xff1a;SSH连接群晖使用临时root权限执行 AME3.x激活补丁 只适用于x86_64的&#xff1a;DSM7.x Advanced Media Extensions (AME)版本3.0.1-2004、3.1.0-3005 激活过程需要下载官方的解码包&#xff0c;过程较慢&#xff0c;耐心等待。。。 DSM7.1和7.2的AME版…

Rust - 变量与数据的交互方式(move)

变量与数据的交互方式 - 移动 Rust 中的多个变量可以采用一种比较独特的方式和同一个数据进行交互&#xff0c;如下代码所示&#xff0c;将变量x的值赋给y&#xff1a; fn main() {let x 1;let y x; }我们大概可以推论出上述代码的原理&#xff1a;将1这个整数绑定给x变量&…