重新整理数据结构与算法(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 ...
随机推荐
- C++ //vector容器嵌套容器
1 //vector容器嵌套容器 2 #include <iostream> 3 #include <string> 4 #include<fstream> 5 # ...
- 专访容智信息柴亚团:最低调的公司如何炼成最易用的RPA?
专访容智信息柴亚团:最低调的公司如何炼成最易用的RPA? 专访容智信息柴亚团:终极愿景是助力天下企业成为数字化孪生组织 文/王吉伟 6月,容智信息(容智)正式发布了全新的移动端RPA产品iBot Mo ...
- 数据安全刻不容缓,国产智能化厂商首获SOC 2鉴证报告有何意义?
数据安全刻不容缓,国产智能化厂商首获SOC 2鉴证报告有何意义? 了解SOC 2与ISO 27001的区别,你就知道SOC 2对智能自动化厂商的意义了 文/王吉伟 要问当前组织对于数字化转型的最大顾虑 ...
- Lua中pair和ipair的区别
Lua中pair和ipair的区别? 二者都是Lua中内置的迭代器,可以对数组或table进行遍历. 在正常的数组或table的遍历中,二者没有区别. tableNormal={"this& ...
- PDF/Excel文件预览功能完整实现-java版本
新需求 最近接到一个新的需求,说是之前直接下载的PDF文件或者是Excel文件,现在不能直接下载,需要实现在线预览功能. 前端人员拿到这个需求后,去看了一下以前的代码,以前调用的下载接口和PDF文件预 ...
- css class 操作列 按钮 之间加 竖线 | class="your-handleBtn" :last-child::after
思路:botton 加一个class 每个右边加个竖线,最后一个不加. 用起来很方便 <template slot="handle" slot-scope="{ r ...
- .NET集成DeveloperSharp实现强大的AOP
(适用于.NET/.NET Core/.NET Framework)[目录]0.前言1.第一个AOP程序2.Aspect横切面编程3.一个横切面程序拦截多个主程序4.多个横切面程序拦截一个主程序5.优 ...
- 记录--分享并解析一个倒计时组件(Vue)
这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 一.前言 入职的第一个需求是跟着一位前端大佬一起完成的一个活动项目. 由于是一起开发,当然不会放过阅读大佬的代码的机会. 因为我的页面中需 ...
- selenium 自动化常用操作
from selenium import webdriver from selenium.webdriver.common.keys import Keys import random import ...
- VS2010插件NuGet
下载地址 NuGet Package Manager - Visual Studio Marketplace NuGet包地址 NuGet Gallery | Home