重新整理数据结构与算法(c#)——算法套佛洛伊德算法[三十二]
前言
佛洛伊德算法和迪杰斯特拉算法非常像,但是它求的是任何一个点到其他点之间的距离。
假设有一张图:

转换为矩阵为:

他们的前驱为:

可能上面表述前驱不清楚,举个例子。
看下图:


这第二种图表示,从A 经过A 到B,B点的前驱是A,他们的长度是5,红框中的数表示是A经过的点。
现在A到不了D,A经过A到D就是N,表示无限大。
所以我们需要更新数据,得到最优解。
解法如下:

举个例子,原始图是A通过A到B的距离。
那么可以尝试这样,让所以的点经过A到达其他的点,他们的距离是否更短。如图:

以此类推其他。
正文
代码:
static void Main(string[] args)
{
// 测试看看图是否创建成功
char[] vertex = { 'A', 'B', 'C', 'D', 'E', 'F', 'G' };
//创建邻接矩阵
int N = 65535;
int[,] matrix = {
{ 0, 5, 7, N, N, N, 2 },
{ 5, 0, N, 9, N, N, 3 },
{ 7, N, 0, N, 8, N, N },
{ N, 9, N, 0, N, 4, N },
{ N, N, 8, N, 0, 5, 4 },
{ N, N, N, 4, 5, 0, 6 },
{ 2, 3, N, N, 4, 6, 0 }};
GraphFoy graph = new GraphFoy(matrix, vertex);
graph.floyd();
graph.show();
Console.Read();
}
}
class GraphFoy {
private char[] vertex;
private int[,] dis;
private int[,] pre;
public GraphFoy(int[,] matrix,char[] vertex)
{
this.vertex = vertex;
this.dis = matrix;
this.pre = new int[vertex.Length,vertex.Length];
for (int i=0;i<vertex.Length;i++)
{
for (int j=0;j<vertex.Length;j++)
{
this.pre[i, j] = i;
}
}
}
// 显示pre数组和dis数组
public void show()
{
//为了显示便于阅读,我们优化一下输出
char[] vertex = { 'A', 'B', 'C', 'D', 'E', 'F', 'G' };
for (int k = 0; k < vertex.Length; k++)
{
// 先将pre数组输出的一行
for (int i = 0; i < vertex.Length; i++)
{
Console.Write(vertex[pre[k,i]] + " ");
}
Console.WriteLine();
// 输出dis数组的一行数据
for (int i = 0; i < vertex.Length; i++)
{
Console.Write("(" + vertex[k] + "到" + vertex[i] + "的最短路径是" + dis[k,i] + ") ");
}
Console.WriteLine();
}
}
public void floyd()
{
int len = 0;
for (int k = 0; k < vertex.Length; k++)
{
for (int i = 0; i < vertex.Length; i++)
{
for (int j = 0; j < vertex.Length; j++)
{
len = dis[k, i] + dis[k, j];
if (len<dis[i,j])
{
dis[i, j] = len;
pre[i, j] = pre[k, j];
//pre[i,j]=pre[k,j];
}
}
}
}
}
结果如下:

重新整理数据结构与算法(c#)——算法套佛洛伊德算法[三十二]的更多相关文章
- COJ968 WZJ的数据结构(负三十二)
WZJ的数据结构(负三十二) 难度级别:D: 运行时间限制:5000ms: 运行空间限制:262144KB: 代码长度限制:2000000B 试题描述 给你一棵N个点的无根树,边上均有权值,每个点上有 ...
- [COJ0968]WZJ的数据结构(负三十二)
[COJ0968]WZJ的数据结构(负三十二) 试题描述 给你一棵N个点的无根树,边上均有权值,每个点上有一盏灯,初始均亮着.请你设计一个数据结构,回答M次操作. 1 x:将节点x上的灯拉一次,即亮变 ...
- 数据结构算法C语言实现(三十二)--- 9.1静态查找表
一.简述 静态查找表又分为顺序表.有序表.静态树表和索引表.以下只是算法的简单实现及测试,不涉及性能分析. 二.头文件 /** author:zhaoyu date:2016-7-12 */ #inc ...
- (floyd)佛洛伊德算法
Floyd–Warshall(简称Floyd算法)是一种著名的解决任意两点间的最短路径(All Paris Shortest Paths,APSP)的算法.从表面上粗看,Floyd算法是一个非常简单的 ...
- Ex4_21 最短路径算法可以应用于货币交易领域..._第十二次作业
(a) 建立一个有向图G(V,E),每个顶点表示一种货币,两个顶点之间的边权的大小ex[u][v]表示两种货币之间的汇率,若要找一个最有利的兑换序列,把货币s兑换成货币t,即在若干种兑换序列中选择 ...
- SSE图像算法优化系列三十二:Zhang\Guo图像细化算法的C语言以及SIMD指令优化
二值图像的细化算法也有很多种,比较有名的比如Hilditch细化.Rosenfeld细化.基于索引表的细化.还有Opencv自带的THINNING_ZHANGSUEN.THINNING_GUOHALL ...
- 算法导论(Introduction to Algorithms )— 第十二章 二叉搜索树— 12.1 什么是二叉搜索树
搜索树数据结构支持很多动态集合操作,如search(查找).minmum(最小元素).maxmum(最大元素).predecessor(前驱).successor(后继).insert(插入).del ...
- 【算法系列学习】[kuangbin带你飞]专题十二 基础DP1 G - 免费馅饼
https://vjudge.net/contest/68966#problem/G 正解一: http://www.clanfei.com/2012/04/646.html #include< ...
- 【算法系列学习】[kuangbin带你飞]专题十二 基础DP1 F - Piggy-Bank 【完全背包问题】
https://vjudge.net/contest/68966#problem/F http://blog.csdn.net/libin56842/article/details/9048173 # ...
- 【算法系列学习】[kuangbin带你飞]专题十二 基础DP1 E - Super Jumping! Jumping! Jumping!
https://vjudge.net/contest/68966#problem/E http://blog.csdn.net/to_be_better/article/details/5056334 ...
随机推荐
- MYSQL 主从不一致的原因分析
数据库作为存储数据的组件,数据的一致性一定是要保证的前提,今天给出两个场景来分析数据不一致的原因. binlog同步模式导致主从不一致 在MYSQL 中主库向从库同步数据是利用binlog记录修改操作 ...
- 基于ads1299的可穿戴脑电信号采集之性能调试总结
一 前言 问题背景: 最近做项目,遇到了一个问题,就是采集的信号有噪声,在这里做了很多尝试. 二 测试步骤 A 内部方波信号质量,通过测试发现内部方波信号质量特别好.这个说明了软件和存储这块,没啥 ...
- day04-3服务器推送新闻
多用户即时通讯系统04 4.编码实现03 4.7功能实现-服务器推送消息功能实现 4.7.1思路分析 服务器推送新闻,本质其实就是群发消息 在服务器启动一个独立线程,专门负责推送新闻 该线程通过管理线 ...
- JSF之常用注解
@ManagedBean 以托管 bean 的形式注册一个类实例,然后将其放入到使用其中一个 @...Scoped 注释指定的范围内.如果没有指定任何范围,JSF 将把此 bean 放入请求范围,如果 ...
- Python 潮流周刊第 42 期(摘要)+ 赠书《流畅的Python》6本
本周刊由 Python猫 出品,精心筛选国内外的 250+ 信息源,为你挑选最值得分享的文章.教程.开源项目.软件工具.播客和视频.热门话题等内容.愿景:帮助所有读者精进 Python 技术,并增长职 ...
- 【专访蓝景科技】5G+实时云渲染赋能数字孪生,共建元宇宙
2021年伊始,元宇宙 概念不断扩展探讨与深入,国内外科技巨头扎堆布局元宇宙. 元宇宙第一股------ROBLOX 上市.字节跳动 90亿收购国内TOP1VR厂商PICO.FACEBOOK改名为 ...
- 04.Android之动画问题
目录介绍 4.0.0.1 Android中有哪几种类型的动画,属性动画和补间动画有何区别?补间动画和属性动画常用的有哪些? 4.0.0.2 View动画为何不能真正改变View的位置?而属性动画为何可 ...
- [Spring]aop的配置与使用
[版权声明]未经博主同意,谢绝转载!(请尊重原创,博主保留追究权) https://blog.csdn.net/m0_69908381/article/details/129907717 出自[进步* ...
- linux 查询CPU相关信息
1.获取CPU详细信息 cat /proc/cpuinfo 2.查看物理CPU个数 cat /proc/cpuinfo |grep "physical id"|sort |uniq ...
- spring boot @Scheduled 单线程的问题
package com.lxw.lxwDemo; import org.springframework.scheduling.annotation.EnableScheduling; import o ...