图的最短路径——Floyd例题

Floyd 算法+例题 众所周知,Floyd是来求最短路问题的算法 最短路径问题是图论研究中的一个经典算法问题, 指在寻找图(由结点和路径组成的)中两结点之间的最短路径。 例如: Floyd是用了DP的思想 决策需要枚举中转点,不妨考虑也以中转点集为阶段 F[k,i,j]表示”可以经过标号≤k的点中转时”从i到j的最短路 F[0,i,j]=dis[i,j],dis为前面定义的邻接矩阵 F[k,i,j]=min{F[k-1,i,j] , F[k-1,i,k]+F[k-1,k,j]},O(N^3) k这一维空间可以省略,变成F[i, 阅读详情

产生数

题目描述 Description

  给出一个整数 n(n<10^30) 和 k 个变换规则(k<=15)。
  规则:
   一位数可变换成另一个一位数:
   规则的右部不能为零。
  例如:n=234。有规则(k=2):
    2-> 5
    3-> 6
  上面的整数 234 经过变换后可能产生出的整数为(包括原数):
   234
   534
   264
   564
  共 4 种不同的产生数
问题:
  给出一个整数 n 和 k 个规则。
求出:
  经过任意次的变换(0次或多次),能产生出多少个不同整数。
  仅要求输出个数。

输入描述 Input Description

键盘输人,格式为:
   n k
   x1 y1
   x2 y2
   ... ...
   xn yn

输出描述 Output Description

 屏幕输出,格式为:
  一个整数(满足条件的个数)

样例输入 Sample Input


   234 2
   2 5
   3 6
 

样例输出 Sample Output

4

分析

本题乍一看并没有明显的图更没有,所以本题的点(Key)在于发现隐含在题目中的图,或者说自己建图。

细心观察还是可以发现图的 如题文

变换规则

            2-> 5
    3-> 6

这里写成方向箭头具有明显的指向性 。

规则数<=15

数字一共10个 那么小于等于15 意味着肯定不能局限于一对一的关系。

由此看来数字之间存在网状的对应关系,而网状结构即是图,且为有向图。

反观题目整体,一个大体的思路是:由于数字长度颇大,所以以字符串读入,产生数的总情况数目可以根据概率论排列组合的原理,总数目即是每位数字可能变化的种类之积。即按顺序检索每一位,查看每一位有多少种可能的变化,并将每一位变化的可能数目相乘即为目标所求。

现在问题在于如何揪出每一位数字变化的可能数。显然若1可以变化为5,则存在一条由1指向5的单向路径,若此时有一种规则是5 - >7,说明一条由5指向7的单向路径,同时存在一条由1指向5再指向7的单向路径。那么如果出现一个数位上的数字是1,对应的可能性就是5和7这两种,即该位数变化的可能数为2.。这个问题就可以转为求我们刚刚构建的那张有向图的连通性。求有向图的连通性,我们自然就可以使用Floyd算法。

Floyd算法博客链接:https://blog.youkuaiyun.com/createprogram/article/details/86710519

 

#include<bits/stdc++.h>
using namespace std;
const int INF=0x3f3f3f3f;
int dis[10][10];
long long ans=1,jishu=1;
int main()
{ string x;
  int k,x1,x2;
  cin>>x;
  cin>>k;
  for(int i=0;i<=9;i++)
  { for(int j=0;j<=9;j++)
    {if(i==j)  dis[i][j]=0;
     else dis[i][j]=INF;
    }
  }
  while(k--)
  { cin>>x1>>x2;dis[x1][x2]=1;
  }
  for(int k=0;k<=9;k++)//FLOYD算法 
  for(int i=0;i<=9;i++)
  for(int j=0;j<=9;j++)
  { if(i!=k&&j!=k&&i!=j)
    { dis[i][j]=min(dis[i][j],dis[i][k]+dis[k][j]);
    }
  }
  for(int i=0;i<x.length();i++)
  { jishu=1;
   for(int j=0;j<=9;j++)
    { if((dis[x[i]-'0'][j]!=INF)&&(dis[x[i]-'0'][j]!=0))
      { jishu++;
      }
    }
    ans*=jishu;
  }
  cout<<ans<<endl; 
  
}

 

Floyd算法例题整理 这题还有一个难点在于需要将环输出,这个其实可以由最短路的特性得到,我们来想一下,虽然是分了n类来看,但是我们实际上只要维护一个变量来存最小值即可,最小值每次更新的时候,就说明有一个环了,我们可以用一个数组来存这个环,显然环上有i,j,k三点,那么问题就转化成中间的那些路径该怎么求,中间的那些是如何得到的呢,显然是在更新d[i][j]的时候得到的,那么我们只需要记录一下d[i][j]是被哪个中间点更新的即可还原路径(用递归实现)。思路:题目的意思很清楚,需要求一个环,环的要求是边的长度之和最小。 阅读详情

相关推荐

Floyd算法、Dijkstra算法例题

二

qq_45707044的博客 1086

floyd算法图文详解(全)_《羊卓的杨的算法笔记》_Quentin

floyd算法 一.floyd算法是什么?     floyd算法就是用来求图中任意两点最短路径的,这里举一个例子,如何求下图中任意两点间的最短路径呢?     我们用一个二维数组e[i] [j]来存储上面这个图所表示的意义。这里规定一个顶点到自己的值是0,顶点之间无法到达的值是∞。     这里我们要想一下,如何获得两点之间的最短距离呢?只能在这两个点中间再插入一个新的顶点使得缩短原

qq_45800977的博客 1万+

Floyd(弗洛伊德算法) 求最短路径 有向图

暑假,小哼准备去一些城市旅游。有些城市之间有公路,有些城市之间则没有,如下图。为了节省经费以及方便计划旅程,小哼希望在出发之前知道任意两个城市之前的最短路程。 上图中有4个城市8条公路,公路上的数字表示这条公路的长短...

yjyxw的博客 3591

算法随笔:Floyd

Floyd算法是一种对所有点对最短路径算法、多源最短路径算法,以此计算能得到图中每一对节点之间的最短路径。Floyd不仅可以用来求多源最短路,也可以用于解决传递闭包问题。

qq_45554473的博客 938

[数学基础]Floyd算法理论基础(含例题)

上一篇博文我们介绍了Dijkstra算法求最短路径,这次我们来

ycwwl1993的博客 4808

Floyd算法

基本思想 图G用邻接矩阵表示,通过一个三重循环,产生一个存储每个节点最短距离的矩阵; 任意节点i到j的最短路径两种可能: 1. 直接从i到j; 2. 从i经过若干个节点k到j。 map(i,j)表示节点i到j最短路径的距离,对于每一个节点k,检查map(i,k)+map(k,j)小于map(i,j),如果成立,map(i,j) = map(i,k)+map(k,j);遍历每个k,每次更新的是除第k...

weixin_43689491的博客 451

【狂热算法篇】探秘图论之 Floyd 算法:解锁最短路径的神秘密码(通俗易懂版)

嘿,算法爱好者看过来!【狂热算法篇】带你闯入图论世界,聚焦 Floyd 算法。它宛如一把神秘钥匙,能解锁任意两点间最短路径。无需高深知识,通俗讲解搭配实例,C++ 代码深度剖析,让你轻松掌握这神奇 “密码”,开启算法新征程。

羑悻的博客. 6585

Floyd算法又称为弗洛伊德算法

Floyd算法又称为弗洛伊德算法,插点法,是一种用于寻找给定的加权图中顶点间最短路径的算法。 核心思路   通过一个图的权值矩阵求出它的每两点间的最短路径矩阵。   

FLoyd算法的入门与应用

本文主要讲了最短路问题,以及解决最短路问题的Floyd算法概念与两道简单的相关例题。

m0_52711790的博客 1556

微信小程序获取用户手机号全流程实战(附完整代码)

本文详细介绍了微信小程序获取用户手机号的全流程实战,包括前端授权、后端解密及安全合规要点。通过传统授权按钮和新版手机号快速验证组件两种方案,帮助开发者高效实现功能,并附完整代码示例。重点解析了微信小程序接口的使用技巧和常见问题解决方案,确保数据安全与用户体验。

weixin_29280219的博客 568

ROS小车定位实战:如何用rf2o_laser_odometry和robot_localization实现精准里程计(附避坑指南)

本文详细介绍了如何利用rf2o_laser_odometry和robot_localization在ROS中实现高精度小车定位。通过激光里程计与状态估计的黄金组合,解决室内移动机器人的定位难题,包括环境搭建、算法配置、多传感器融合策略及实战避坑指南,帮助开发者快速部署稳定可靠的定位系统。

weixin_29081703的博客 287

图论算法:Floyd算法

则我们便可以得到最后的最短路径就是 e[1] [k] + e[k] [2],其中 e[1] [k] 包含之前所有 k -1 个中转点的计算后的最短路径。的概念在里面,即每个村庄的 修复时间 是固定的,并且是会影响到我们的选择的,因为如果我们计算 1 到 3的村庄的最短路径,可能这两个村庄的修复时间在我们所给的时间内,,不能超过 k时间,因此我们就可以每次询问使用一次floyd算法了,但是我们的k是固定的,我们只需要两重循环就好了。,包含 1,2,3,4,5,6 k-1 k,条公路的长度,公路是双向的。

ylh的博客 652

Linux平台CCS安装配置完整示例

手把手讲解在Linux系统中完成CCS安装与环境配置的全过程,涵盖关键步骤与常见问题解决,是查找ccs安装教程时不可多得的实战指南。

weixin_42601134的博客 514

图与网络模型

图G的边e是一个结点偶对: [a, b],其中a,b=V. e可以是有序的,称为有向边,简称为弧, a称为弧e 的始点,b称为e 的终点,统称为e 的端点;最短路:对赋权有向图D中任两结点u和v ,若在从u到 v 的所有路径中能找到一条路径,使得该路径所有弧的 权数(可以是时间,距离或费用)之和最小,则称这 条路为从u到v 的最短路.图2是一个石油流向的管网示意图, v1代 表石油开采地, v7代表石油汇集站,线旁的数字表 示管线的长度,现在要从v1地调运石油到v7地,怎么 选择管线可使路径最短?

m0_74473137的博客 1299

双脉冲测试中IGBT驱动电阻和驱动电容的研究

  在LTspice中没有双脉冲波形发生器,要做一个双脉冲的波形只能用电压源来进行特殊设置,不是很方便,为此我写了一个双脉冲波形发生器,有需要的可以下载。双脉冲波形发生器。   如下,该元器件可以自定义延迟时间Td,第一个脉冲宽度T1,第二个脉冲宽度T3,两个脉冲间隔T2,脉冲循环个数Ncycle以及高低电平Vhigh,Vlow。       IGBT开通时Rg的影响: 如果增大Rg: ①开通延...

gaoyong_wang的博客 8348

利用ArcGIS的模型构建器实现批量投影栅格和批量克里金插值

博主要批量投影几百个栅格,但是ArcGIS中的投影栅格的批处理工具需要手动一条条设置参数,还是麻烦,因此学习了使用模型构建器(ModelBuilder)来批量投影栅格,可以导入需投影栅格的文件夹,然后迭代投影,并按栅格原名逐个输出到指定目录。 1.在工具箱里构建模型 在arctool box里右键点击空白处,选择【添加工具箱】,点击ArcGIS默认工作目录的工具箱进行添加,然后Toolbox就会被添加到ArcToolbox页面,右键点击Toolbox,选择“新建”-“模型” 2.编写模型 (1).

qq_36958801的博客 1万+

算法模板(Java版)_图的最短路径

算法模板(Java版)_图的最短路径,包含 朴素 Dijkstra、堆优化版 Dijkstra、bellman-ford、SPFA 和 Floyd 写于2025/02/19

ZZHow Blog 1155

CKA-CN考试之路----2

部分知道就可以了,考试不用输入,后面不再复述.这里我们需要将两端内容凭借成1个yaml。执行题目中给的的命令进行测试。

Q先生 241

最短路径-POJ2139-图算法基础专项

文章目录图的表示最短路径问题例题POJ 2139 图的表示 邻接矩阵 v[i][j]v[i][j]v[i][j],i和j表示从点i到点j的距离或开销 特点能直观的看到两点之前有没有边 缺点:可能内存开销比较大,尤其是对于那种稀疏图来讲 最短路径问题 Floyd算法 可以在O(V3)O(V^3)O(V3)时间内求得任意两点的最短路径。 这个方法应用了动态规划思想,在之前动态规划专项中普及过这类问题的思考方式。 在此就直接说结论了,如有问题可以参考之前的背包问题。 首先我们定义dp[k][i][j]dp[k][

weixiao2015的博客 485

ERROR: Could not install packages due to an OSError: [Errno 2] No such file or directory解决方案

本文主要介绍了ERROR: Could not install packages due to an OSError: [Errno 2] No such file or directory解决方案,希望能对使用Python的同学们有所帮助。 文章目录 1. 问题描述 2. 解决方案

weixin_43178406的博客 11万+

YOLO26涨点改进 | 独家创新,细节涨点改进篇 | CVPR 2025顶会 | YOLO26引入Mona即插即用模块, 含MoCAA和DyTMona二次创新改进,含多种创新改进高效发论文

本文给大家介绍Mona即插即用模块, 含MoCAA和DyTMona二次创新模块优化YOLO26模型。YOLO26引入 Mona通过引入多尺度视觉友好型卷积滤波器(如3x3、5x5、7x7深度卷积)和可伸缩归一化层来优化适配器设计,以更好地处理视觉信号并调节输入特征分布。YOLO26引入Mona即插即用模块, 含MoCAA和DyTMona二次创新改进,含多种创新改进高效发论文。适合目标检测、图像分割、图像分类等所有CV任务通用即插即用模块。

Ai缝合怪、助力小伙伴高效发论文 239

Floyd--Warshall算法——最短路径

弗洛伊德算法(Floyd) 简介: 主要用来解决任意两点间的最短路径的一种算法(不能解决带有“负权回路”即“负权环”的图,因为它没有最短路径) 时间复杂度为O(N3),空间复杂度为O(N2) 算法思路: 将相关数据用邻接矩阵储存(邻接矩阵详解), 若两个点间没有联系,则赋值为∞*之后对矩阵进行更新,每次选取一个点作为经过点,比较该路线与之前的大小,选取较小的,更新数据,重复以上操作。 例题展示 洛谷:B3647 【模板】Floyd 题目描述 给出一张由 n 个点 m 条边组成的无向图。 求出所有点对 (i,

weixin_70911613的博客 641

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

floyd

Floyd 多元最短路径 注意这个一定是松弛点在最外层循环 (上面这条如果记不住其实跑三次floyd就一定可以得出正解,但毕竟会被卡常) 这是一个耳熟能详的算法,对于每一个oier来讲应该都写过,主要的思想就是通过不断地枚举顶点去进行松弛操作,其实对于单纯的多元最短路,我们可以打dijk加枚举,或者直接bfs加枚举,复杂度都比他小,但是这个算法的作用其实是哟个思想,我们可以利用这个松弛操作的思想来干很多事,比如维护图的连通性,就有点像并查集。 这里来一道维护图的关系的例题,https://www.luogu

yyyyrr的博客 173

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

算法总结-图论-最短路径(Dijkstra算法/Bellman-Ford算法/Floyd-Warshall算法)

本文主要总结了 Dijkstra 算法、Bellman-Ford 算法、Floyd-Warshall 算法三种常见的求最短路径算法的基本原理、代码实现以及正确性证明,并在文末附有少量例题和参考文献,方便深入理解和巩固最短路径有关算法。

m0_72786913的博客 1591

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

Floyd最小环

  今天在找最短路题目做的时候碰到了最小环,直接呆了,能想得到可以通过删除 i->j 的直接路径 w,然后通过 dijkstra 计算 i->j 最短路 dis[j],相加 w+dis[j] 就构成了环,但这样太麻烦了吧。   然后就去学习了Floyd的最小环,老实说我只看懂了一半,由于各方博客上的文字说明统统避开了我的疑惑点,好在是个简单模板,暂时先强行记忆了。   例题:hdu1599 Problem Description 杭州有N个景区,景区之间有一些双向的路来连接,现在8600想找一条

lllllan 208

最短路------Floyd详细版

Floyd算法 求任意一对顶点间的最短路径。时间复杂度为O(n3),适用于负边权的情况。 原理 if(d[i][k]+d[k][j]<d[i][j])d[i][j]=d[i][k]+d[k][j] 算法实现 for(int k=1;k<=n;k++){ for(int i=1;i<=n;i++){ for(int j=1;j<=n;j++){ if(d[i][k]+d[k][j]<d[i][j])d[i][j]=d[i][k]+d[k][j]; } }

Oops的博客 511
上一篇: L1-056 猜数字 (20 分)
下一篇: 图的最小生成树——例题
黑色吊椅
博客等级 码龄9年 102粉丝 78原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值