最短路径整理(未完成)
来源:互联网 发布:民生银行软件有问题 编辑:程序博客网 时间:2024/06/11 19:34
最短路径问题(Shortest Path Problem)
问题描述:
在有向图或者无向图中,如果说从其中的某一点(源点)到另外一点(终点)的路径可能不止一条,而找出的路径权值总和最小的那一条叫做最短路径。
其中,根据有向图或无向图中各边权取值的情形及问题求解所需,最短路径问题分为以下4种情形,分别用不同的算法求解。
1).求所有顶点间的最短路(边权值允许为负值,但不存在负权值回路),也就是在最短路径算法中最简单明了的算法------------Floyd算法。
2).求单源最短路径,边权值允许为负值,但不存在负权值回路--------Bellman-Ford算法。
3).因Bellman-Ford算法浪费了许多时间做无必要的松弛,可以用SPFA算法进行优化,SPFA算法用的是队列进行的优化,也就是用队列优化的Bellman-Ford算法。
4).求单源最短路径(边的权值非负),就是固定一个顶点为源点,求源点到其他每个顶点的最短路径-----Dijkstra算法
弗洛伊德(Floyd)算法(五行最短路)
算法描述:
Floyd算法是一个经典的动态规划算法。用邻接矩阵的形式来表示,对于一个顶点数是n的图,用n×n的矩阵来表示,其对角线的元素为0,其他元素map[i][j](i≠j)就表示从vi到vj的有向路径长度
其状态转移方程如下:map[i,j]:=min{map[i,k]+map[k,j],map[i,j]};
map[i,j]表示i到j的最短距离,k是穷举i,j的断点。
从节点i到节点j 要么直接到达,要么经过k个断点到达 那么对于每一个k我们只要比较map[i][k]+map[k][j] <map[i][j] 成不成立,如果成立,就map[i][j]=map[i][k]+map[k][j]]。
时间复杂度为O(n^3)
弗洛伊德(Floyd)算法代码模板:
例题:http://acm.hdu.edu.cn/showproblem.php?pid=1874畅通工程续
Problem Description某省自从实行了很多年的畅通工程计划后,终于修建了很多路。不过路多了也不好,每次要从一个城镇到另一个城镇时,都有许多种道路方案可以选择,而某些方案要比另一些方案行走的距离要短很多。这让行人很困扰。
现在,已知起点和终点,请你计算出要从起点到终点,最短需要行走多少距离。Input本题目包含多组数据,请处理到文件结束。
每组数据第一行包含两个正整数N和M(0<N<200,0<M<1000),分别代表现有城镇的数目和已修建的道路的数目。城镇分别以0~N-1编号。
接下来是M行道路信息。每一行有三个整数A,B,X(0<=A,B<N,A!=B,0<X<10000),表示城镇A和城镇B之间有一条长度为X的双向道路。
再接下一行有两个整数S,T(0<=S,T<N),分别代表起点和终点。Output对于每组数据,请在一行里输出最短需要行走的距离。如果不存在从S到T的路线,就输出-1.Sample Input3 30 1 10 2 31 2 10 23 10 1 11 2Sample Output2-1最基础的最短路径算法代码如下:©TyxMaek1997-2017
- 最短路径整理(未完成)
- 最短路径(未完成)
- 最短路径整理
- 16.最短路径 (25分)(未完成)
- 最短路径算法整理(二)
- 最短路径算法整理
- 最短路径算法研究未完成的算法
- hdoj3790_最短路径问题(最短路径)
- 最短路径问题(最短路径)
- 最短路径(java)
- 最短路径 (yp)
- HDU1874(最短路径)
- POJ2387(最短路径)
- 图(最短路径)
- 迪杰斯特拉(最短路径)
- 最短路径(Dijkstra)
- HDU3665Seaside(最短路径)
- 最短路径(Dijkstra)
- 白话经典算法系列之六 快速排序 快速搞定
- ImageLoader获取本地缓存图片的bitmap
- B树
- WebStorm使用TypeScript
- Cadence16.5 叠层设置怎样设置正片负片
- 最短路径整理(未完成)
- office2007 安装出现的问题
- Linux中表示“时间”的结构体和相关函数
- maven 基础教程
- 基于概率模型的聚类
- Mac osx 下搭建java开发环境
- 微信公众号开发(1)
- myeclipse删除文件或项目时出现异常
- C# 两个独立exe程序直接通信 截取Windows消息来触发自定义事件 实例