Floyd_Warshall算法
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算法的更多相关文章
- POJ 2263 最短路Floyd_warshall算法
灰常开心的用Floyd变形写出来了.额.对米来说还是牺牲了一定的脑细胞的.然而.我发现.大牛们还可以神奇的用Kruskal求最大生成树的最小权值来写.也可以用Dijkatra变形来写.T_T....5 ...
- 最短路径问题——floyd算法
floyd算法和之前讲的bellman算法.dijkstra算法最大的不同在于它所处理的终于不再是单源问题了,floyd可以解决任何点到点之间的最短路径问题,个人觉得floyd是最简单最好用的一种算法 ...
- 数据结构与算法分析 - 最短路(Dijkstra+floyd_Warshall+bellman_ford)
先附上Djikstra的代码:普通版 const int maxn=101; const int INF=0x3f3f3f3f; int edges[maxn][maxn]; int dist[max ...
- 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 三维几 ...
- Floyd-Warshall算法详解(转)
Floyd-Warshall算法,简称Floyd算法,用于求解任意两点间的最短距离,时间复杂度为O(n^3).我们平时所见的Floyd算法的一般形式如下: void Floyd(){ int i,j, ...
- ACM-ICPC竞赛模板
为了方便打印,不再将代码放到代码编辑器里,祝你好运. ACM-ICPC竞赛模板(1) 1. 几何 4 1.1 注意 4 1.2 几何公式 4 1.3 多边形 6 1.4 多边形切割 9 1.5 浮点函 ...
- UVa 10048: Audiophobia
这道题要求我们求出图中的给定的两个节点(一个起点一个终点,但这是无向图)之间所有“路径中最大权值”的最小值,这无疑是动态规划. 我开始时想到根据起点和终点用动态规划直接求结果,但最终由于题中S过大,会 ...
- poj 1094 Sorting It All Out(图论)
http://poj.org/problem?id=1094 这一题,看了个大牛的解题报告,思路变得非常的清晰: 1,先利用floyd_warshall算法求出图的传递闭包 2,再判断是不是存在唯一的 ...
- Python 机器学习实战 —— 无监督学习(上)
前言 在上篇<Python 机器学习实战 -- 监督学习>介绍了 支持向量机.k近邻.朴素贝叶斯分类 .决策树.决策树集成等多种模型,这篇文章将为大家介绍一下无监督学习的使用.无监督学习顾 ...
随机推荐
- python自动化之web抓取
''' 从web抓取数据: webbrowser:是python自带的,打开浏览器获取指定页面. requests:从因特网上下载文件和网页. Beautiful Soup:解析HTML,即网页编写的 ...
- JAVA ACM 基础
java ACM Java做ACM-ICPC的特点: (1) 在一般比赛中,Java程序会有额外的时间和空间,而实际上经过实验,在执行计算密集任务的时候Java并不比C/C++慢多少,只是IO操作较慢 ...
- RRDtool绘制lvs连接数图形
需求:用RRDtool绘制lvs的连接数图形 RRDtool是一个强大的绘图工具,作者是Tobias Oetiker. RRD全称Round Robin Database,轮转数据库,也是一个时间序列 ...
- 用C语言获取任意文件的长度(可能大于2GB)#define _FILE_OFFSET_BITS 64
打开文件后用 fseek() 函数把文件位置指针移动到文件的末尾,用 ftell() 获得这时位置指针距文件头的字节数,这个字节数就是文件的长度.但是这样做也会受到下面的限制:ftell() 函数的返 ...
- sidecar学习
1.SideCar的出现 微服务的结构是细粒度的,由多个服务构成,支持不同的服务用不同的语言来编写,比如a服务用python,b服务用java,C服务用php等,我们称为异构语言,那么在利用zuul来 ...
- Python【网络编程】内置模块urllib
from urllib import request,parseurl = 'http://www.nnzhp.cn'req = request.urlopen(url) #打开一个url,发get请 ...
- python模块module package
python模块module package module package 常用模块 模块与包的区别 模块分为内置模块.第三方模块,自定义模块 程序会先从内置到第三方再到当前工作目录下去找你导入的 ...
- vue项目post请求405报错解决办法。
步骤一: 确定ajax语法没有错误. 步骤二: 与后台对接确认请求是否打到nginx上? 步骤三: 检查nginx是否配置了事件转发,比如我们的接口是在,当前地址的8100端口上,并且接口地址上有v1 ...
- python蒙特卡洛算法模拟赌博模型
sklearn实战-乳腺癌细胞数据挖掘 https://study.163.com/course/introduction.htm?courseId=1005269003&utm_campai ...
- Django分别使用Memcached和Redis作为缓存的配置(Linux环境)
1 使用memcached 1.1 安装memcached 安装(Linux) sudo apt install memcached 启动 #方式一: service memcached start ...