问题简介:

给定T条路,S个起点,D个终点,求最短的起点到终点的距离。

思路简介:

弗洛伊德算法即先以a作为中转点,再以a、b作为中转点,直到所有的点都做过中转点,求得所有点到其他点的最短路径,Floyd算法适用于多源最短路径,是一种动态规划算法,稠密图效果最佳,边权可正可负。优点:容易理解,可以算出任意两个节点之间的最短距离,代码编写简单。缺点:时间复杂度比较高,不适合计算大量数据。Floyd算法时间复杂度为n^3,Dijikstra算法为n^2。

优化代码:

#include <iostream>
#include <cmath>
#include <stdio.h>
#include <cstdio>
#include <cstring>
#include<algorithm>
#include<time.h>
#include<math.h>
#include <stdlib.h>
#include <string.h>
#include <stack> using namespace std; #define MAXN 1000000
#define N 1010
int map[N][N], s[N], e[N], maxx;
int T, S, D;
int floyd()
{
int res = MAXN;
for (int k = ; k <= maxx; k++)
for (int i = ; i <= maxx; i++)
if (map[i][k] != MAXN)//优化
for (int j = ; j <= maxx; j++)
{
if (map[i][j]>map[i][k] + map[k][j])
map[i][j] = map[i][k] + map[k][j];
if (s[i] && e[j] && res>map[i][j])//因为是取最短的一条路径,所以随时记录起点到终点的路
res = map[i][j];
}
return res;
}
int main()
{
while (scanf("%d%d%d", &T, &S, &D) != EOF)
{
memset(map, , sizeof(map));
memset(s, , sizeof(s));
memset(e, , sizeof(e));
for (int i = ; i <= ; i++)//初始化
for (int j = ; j <= ; j++)
map[i][j] = MAXN;
int u, v, w;
for (int i = ; i <= T; i++)
{
scanf("%d%d%d", &u, &v, &w);
maxx = max(maxx, max(u, v));
map[u][v] = w;
}
for (int i = ; i <= S; i++)
{
scanf("%d", &u);
s[u] = ;//起点
}
for (int i = ; i <= D; i++)
{
scanf("%d", &u);
e[u] = ;//终点
}
printf("%d\n", floyd());
}
return ;
}

HDU2066

最新文章

  1. 点击切换panel
  2. &lt;Oracle Database&gt;数据字典
  3. OS初识
  4. [Android]Android系统启动流程源码分析
  5. monitor system
  6. 使用Genymotion安装APK出现错误INSTALL_FAILED_CPU_ABI_INCOMPATIBLE的解决办法
  7. DOM(七)使用DOM控制表格
  8. OKR详解及其实施
  9. C#中的ManagementClass类
  10. nandflash操作详解
  11. GraphicsMagick / ImageMagick缺少lib报错no decode delegate for this image format
  12. 17.1.2 Replication Formats
  13. ubantu命令安装banner
  14. 解决红米等手机(移动端)无法触发touchend事件
  15. 在OpenCV中利用鼠标绘制矩形和截取图像的矩形区域
  16. 3D数学 矩阵常用知识点整理
  17. windows安装并使用Anaconda
  18. Dining POJ - 3281
  19. 有关java调用方法参数传递的分析
  20. 数据仓库基础(九)Informatica小技巧(1)

热门文章

  1. 转 Redis 总结精讲 看一篇成高手系统-4
  2. JAVA第3,4课(内容合并)
  3. java生成二维码扫码网页自动登录功能
  4. 实例:用户界面控件Kendo UI vs DevExpress对比评测一
  5. C++ MySQL编程
  6. L1-035 情人节 (15 分)
  7. java中的异常处理问题。
  8. Python基础(条件判断,循环,占位符等)
  9. 刚下了VS2010不会用,求大神指点迷津
  10. 解决sublime text 3使用Install Package时出现There are no packages available for installation问题