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;
}

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

最新文章

  1. 【Spring】Spring的定时任务
  2. PHP 小方法之 计算两个时间戳之间相差的日时分秒
  3. setsockopt 设置 SO_LINGER 选项
  4. jquery CDN(内容分发网络)使用
  5. (spring-第5回【IoC基础篇】)spring容器从加载配置文件到实例化bean的内部工作机制
  6. 【二】php常用方法
  7. Java集合之ArrayList和LinkedList的实现原理以及Iterator详解
  8. java子类实例初始化过程
  9. 含有GROUP BY子句的查询中如何显示COUNT()为0的成果(分享)
  10. webservice发送数据,取数据的方式
  11. Xcode7 iOS9网络配置
  12. 3407: [Usaco2009 Oct]Bessie&#39;s Weight Problem 贝茜的体重问题
  13. C# 隐藏文件
  14. sql2012笔记
  15. Tomcat8+Spring-Security 启用安全通道(https)的一步步实现
  16. Redis入门教程(一)
  17. Centos7安装vsftpd (FTP服务器)
  18. Docker初始
  19. Angular 中后台前端解决方案 - Ng Alain 介绍
  20. Meandering Through the Maze of MFC Message and Command Routing MFC消息路由机制分析

热门文章

  1. CSU1392(NCPC2013)_Number Trick
  2. 记一次java程序out of memory问题
  3. ORA-01034和ORA-27101的解决方法
  4. mybatis plugin作为一款优秀的mybatis跳转插件
  5. 阿里大鱼短信发送,放到项目中报错Java.lang.NoClassDefFoundError:com/aliyuncs/exceptions/ClientException,已解决
  6. 【BZOJ1034】泡泡堂(贪心)
  7. String,static,final
  8. HDU 5306 线段树
  9. 个人在 laravel 开发中使用到的一些技巧(持续更新)
  10. getopt_long