Floyd_Warshall算法主要用于求解所有节点对的最短路径,代码如下:

#include<iostream>

using namespace std;

#define Inf 65536;
#define NIL -1; int N = 5; //假定图的节点有5个
int map[6][6]; //为方便,节点从1开始标号,该矩阵存储权重
int dist[6][6][6];
int path[6][6][6]; void Init() //构建邻接矩阵
{
for (int i = 1; i <= N; i++)
{
for (int j = 1; j <= N; j++)
{
if (i == j)
{
map[i][j] = 0;
}
else
map[i][j] = Inf;
}
}
map[1][2] = 3, map[1][3] = 8, map[1][5] = -4;
map[2][4] = 1, map[2][5] = 7;
map[3][2] = 4;
map[4][1] = 2, map[4][3] = -5;
map[5][4] = 6; } void Floyd_Warshall()
{
for (int i = 1; i <= N; i++)
{
for (int j = 1; j <= N; j++)
{
dist[i][j][0] = map[i][j];
path[i][j][0] = NIL;
}
}
path[1][2][0] = 1, path[1][3][0] = 1, path[1][5][0] = 1;
path[2][4][0] = 2, path[2][5][0] = 2;
path[3][2][0] = 3;
path[4][1][0] = 4, path[4][3][0] = 4;
path[5][4][0] = 5;
for (int k = 1; k <= N; k++)
{
for (int i = 1; i <= N; i++)
{
for (int j = 1; j <= N; j++)
{
if (dist[i][j][k - 1] <= dist[i][k][k - 1] + dist[k][j][k - 1])
{
dist[i][j][k] = dist[i][j][k - 1];
path[i][j][k] = path[i][j][k - 1];
} else
{
dist[i][j][k] = dist[i][k][k - 1] + dist[k][j][k - 1];
path[i][j][k] = path[k][j][k - 1];
} }
}
}
} void Printf_Path(int path[6][6][6], int i, int j)
{
if (i == j)
cout << i << " ";
else if (path[i][j][N] == -1)
{
cout << "NO path from " << i << " to " << j << "exists" << endl;
}
else
{
Printf_Path(path, i, path[i][j][N]);
cout << j << " ";
} } int main()
{
Init();
Floyd_Warshall(); for (int k = 0; k <= N; k++)
{
for (int i = 1; i <= N; i++)
{
for (int j = 1; j <= N; j++)
{
cout << dist[i][j][k] << " ";
}
cout << endl;
}
cout << endl;
} for (int k = 0; k <= N; k++)
{
for (int i = 1; i <= N; i++)
{
for (int j = 1; j <= N; j++)
{
cout << path[i][j][k] << " ";
}
cout << endl;
}
cout << endl;
} Printf_Path( path, 1, 4);
return 0;
}

  夜深了,至亲至疏至陌路。

Floyd_Warshall算法的更多相关文章

  1. POJ 2263 最短路Floyd_warshall算法

    灰常开心的用Floyd变形写出来了.额.对米来说还是牺牲了一定的脑细胞的.然而.我发现.大牛们还可以神奇的用Kruskal求最大生成树的最小权值来写.也可以用Dijkatra变形来写.T_T....5 ...

  2. 最短路径问题——floyd算法

    floyd算法和之前讲的bellman算法.dijkstra算法最大的不同在于它所处理的终于不再是单源问题了,floyd可以解决任何点到点之间的最短路径问题,个人觉得floyd是最简单最好用的一种算法 ...

  3. 数据结构与算法分析 - 最短路(Dijkstra+floyd_Warshall+bellman_ford)

    先附上Djikstra的代码:普通版 const int maxn=101; const int INF=0x3f3f3f3f; int edges[maxn][maxn]; int dist[max ...

  4. acm算法模板(1)

    1. 几何 4 1.1 注意 4 1.2 几何公式 4 1.3 多边形 6 1.4 多边形切割 9 1.5 浮点函数 10 1.6 面积 15 1.7 球面 16 1.8 三角形 17 1.9 三维几 ...

  5. Floyd-Warshall算法详解(转)

    Floyd-Warshall算法,简称Floyd算法,用于求解任意两点间的最短距离,时间复杂度为O(n^3).我们平时所见的Floyd算法的一般形式如下: void Floyd(){ int i,j, ...

  6. ACM-ICPC竞赛模板

    为了方便打印,不再将代码放到代码编辑器里,祝你好运. ACM-ICPC竞赛模板(1) 1. 几何 4 1.1 注意 4 1.2 几何公式 4 1.3 多边形 6 1.4 多边形切割 9 1.5 浮点函 ...

  7. UVa 10048: Audiophobia

    这道题要求我们求出图中的给定的两个节点(一个起点一个终点,但这是无向图)之间所有“路径中最大权值”的最小值,这无疑是动态规划. 我开始时想到根据起点和终点用动态规划直接求结果,但最终由于题中S过大,会 ...

  8. poj 1094 Sorting It All Out(图论)

    http://poj.org/problem?id=1094 这一题,看了个大牛的解题报告,思路变得非常的清晰: 1,先利用floyd_warshall算法求出图的传递闭包 2,再判断是不是存在唯一的 ...

  9. Python 机器学习实战 —— 无监督学习(上)

    前言 在上篇<Python 机器学习实战 -- 监督学习>介绍了 支持向量机.k近邻.朴素贝叶斯分类 .决策树.决策树集成等多种模型,这篇文章将为大家介绍一下无监督学习的使用.无监督学习顾 ...

随机推荐

  1. 题解 CF1005A 【Tanya and Stairways】

    楼上别说这个题水,这个题可能还真有不知道的知识点. 看到这个题,想到刚学的单调栈. 单调栈? 单调栈和单调队列差不多,但是我们只用到它的栈顶. 单调,意思就是一直递增或者递减. 这跟这个题有什么关系? ...

  2. ThinkPHP 5.x远程命令执行漏洞分析与复现

    0x00 前言 ThinkPHP官方2018年12月9日发布重要的安全更新,修复了一个严重的远程代码执行漏洞.该更新主要涉及一个安全更新,由于框架对控制器名没有进行足够的检测会导致在没有开启强制路由的 ...

  3. Linux下vim 快捷键

    vim按d表示剪切 按dd剪切一行 vim命令:命令模式 /关键字 n继续向下查找vim的多行注释: 1.按ctrl + v进入 visual block模式 2.按上下选中要注释的行 3.按大写字母 ...

  4. 公钥与私钥对HTTPS的理解(数字证书的需要)

    本文转自某大牛链接 文中首先解释了加密解密的一些基础知识和概念,然后通过一个加密通信过程的例子说明了加密算法的作用,以及数字证书的出现所起的作用.接着对数字证书做一个详细的解释,并讨论一下window ...

  5. increment/decrement/dereference

    #include <vector> #include <deque> #include <algorithm> #include <iostream> ...

  6. Java入门:基础算法之检查素数

    程序提示用户输入一个数,然后检查所输入的数是否是素数. import java.util.Scanner; class PrimeCheck { public static void main(Str ...

  7. K8S调度之标签选择器

    Kubernetes 调度简介 除了让 kubernetes 集群调度器自动为 pod 资源选择某个节点(默认调度考虑的是资源足够,并且 load 尽量平均),有些情况我们希望能更多地控制 pod 应 ...

  8. Java基础-面向接口(interface)编程

    Java基础-面向接口(interface)编程 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.接口的概念 接口是功能的集合,同样可看做是一种数据类型,是比抽象类更为抽象的“类 ...

  9. Excel 中 VLOOKUP() 函数小结

    应用场景: 数据仓库上游源系统的数据库表变更,现在需要拆分一部分数据出来,单独放到一张新表中.假设原表为A,新表为B,B表和A表结构大部分一样,只有字段的前缀不同,那么我们如何找出到底有哪些字段不同呢 ...

  10. printf与fprintf函数的区别

    printf是标准输出流的输出函数,用来向屏幕这样的标准输出设备输出,而fprintf则是向文件输出,将输出的内容输出到硬盘上的文件或是相当于文件的设备上 printf是有缓冲的输出,fprintf没 ...