经典问题----最短路径(Floyd弗洛伊德算法)(HDU2066)
问题简介:
给定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 ;
}
经典问题----最短路径(Floyd弗洛伊德算法)(HDU2066)的更多相关文章
- Floyd(弗洛伊德)算法(C语言)
转载:https://blog.csdn.net/qq_35644234/article/details/60875818 Floyd算法的介绍 算法的特点 弗洛伊德算法是解决任意两点间的最短路径的一 ...
- Floyd弗洛伊德算法
先看懂如何使用 用Java实现一个地铁票价计算程序 String station = "A1 A2 A3 A4 A5 A6 A7 A8 A9 T1 A10 A11 A12 A13 T2 A1 ...
- JS实现最短路径之弗洛伊德(Floyd)算法
弗洛伊德算法是实现最小生成树的一个很精妙的算法,也是求所有顶点至所有顶点的最短路径问题的不二之选.时间复杂度为O(n3),n为顶点数. 精妙之处在于:一个二重初始化,加一个三重循环权值修正,完成了所有 ...
- Floyd算法(弗洛伊德算法)
算法描述: Floyd算法又称为弗洛伊德算法,插点法,是一种用于寻找给定的加权图中顶点间最短路径的算法.从图的带权邻接矩阵A=[a(i,j)] n×n开始,递归地进行n次更新,即由矩阵D(0)=A,按 ...
- 弗洛伊德算法(Floyd算法)
原博来自http://www.cnblogs.com/skywang12345/ 弗洛伊德算法介绍 和Dijkstra算法一样,弗洛伊德(Floyd)算法也是一种用于寻找给定的加权图中顶点间最短路径的 ...
- [从今天开始修炼数据结构]图的最短路径 —— 迪杰斯特拉算法和弗洛伊德算法的详解与Java实现
在网图和非网图中,最短路径的含义不同.非网图中边上没有权值,所谓的最短路径,其实就是两顶点之间经过的边数最少的路径:而对于网图来说,最短路径,是指两顶点之间经过的边上权值之和最少的路径,我们称路径上第 ...
- 弗洛伊德算法(Floyd )
package com.rao.graph; /** * @author Srao * @className Floyd * @date 2019/12/11 18:43 * @package com ...
- 单源最短路径Dijkstra算法,多源最短路径Floyd算法
1.单源最短路径 (1)无权图的单源最短路径 /*无权单源最短路径*/ void UnWeighted(LGraph Graph, Vertex S) { std::queue<Vertex&g ...
- 弗洛伊德算法Floyed(求各顶点间最短路径):可打印最短路径
#include <iostream> #include <string> #include <iomanip> using namespace std; #def ...
随机推荐
- 使用机房的网线 连接到自己的电脑 解决Internet没有访问权限问题
在机房把机子上的网线拔了,插在自己的笔记本上.发现并不能用,能识别Internet,但是没有访问权限. 解决办法: 去查看机房的机子的IP地址和DNS地址,就是那根网线原本连接的那台机.(网线先别拔出 ...
- 关于org.apache.jasper.JasperException解决方法
没有导入jstl.jar包 解决办法:在项目pom.xml中添加maven项目的jstl.jar 如果导入jstl.jar包 解决办法:检查jstl.jar版本是否与项目兼容,不兼容则切换jstl.j ...
- Spring4中使用通用Mapper
1. 在Spring4中使用通用Mapper Spring4增加了对泛型注入的支持,这个特性对通用Mapper来说,非常的有用,可以说有了这个特性,可以直接在Service中写Mapper<U ...
- 目标检测(一) R-CNN
R-CNN全称为 Region-CNN,它是第一个成功地将深度学习应用到目标检测的算法,后续的改进算法 Fast R-CNN.Faster R-CNN都是基于该算法. 传统方法 VS R-CNN 传统 ...
- Unity more efficient find
Unity caches GameObjects based on their tags, so in a big scene with lots of objects, GameObject.Fin ...
- Linux 操作系统目录结构
/ 根目录 # ls /bin boot dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp var bin - ...
- 运维seq语法
seq-print a sequence of numbers 用于产生从某个数到另外一个数之间的所有整数 语法:seq 开始列 指定步长 结束列 参数: -f :指定输出格式,允许使用print ...
- Spring Boot 异步运用
使用@Async标签 导入包 org.springframework.scheduling.annotation.Async 并配置并发线程池asyncTaskConfig 实现AsyncConfig ...
- type() 和 isinstance()区别
a=111 # type() 返回数据类型 In: type(a) Out: int In: print(type(a)) Out: <class 'int'> # isinstance ...
- 合肥工业大学oj G-诺德森海岸
#include<iostream> #include<vector> #include<bits/stdc++.h> using namespace std; v ...