Dijkstra、Bellman_Ford、SPFA、Floyd算法复杂度比较
有空再更新下用c++, 下面用的Java
Dijkstra:适用于权值为非负的图的单源最短路径,用斐波那契堆的复杂度O(E+VlgV)
- package C24;
- import java.util.Iterator;
- import java.util.LinkedList;
- import java.util.List;
- import C22.GraphFactory;
- import C22.Pair;
- import C22.Weighted_Adjacent_List;
- public class SPFA {
- public int[] spfa(Weighted_Adjacent_List G,String s){
- return spfa(G,G.getVertexIndex(s));
- }
- public int[] spfa(Weighted_Adjacent_List G,int s){
- //1.创建所要的数据结构
- int size = G.getSize();
- int d[] = new int[size]; //距离估计
- for(int i=0;i<d.length;i++){
- d[i] = Integer.MAX_VALUE;
- }
- List<Integer> Q = new LinkedList<Integer>();
- boolean is_in_queue[] = new boolean[size]; //是否在队列中
- for(int i=0;i<is_in_queue.length;i++){
- is_in_queue[i] = false;
- }
- //2.初始化
- d[s] = 0;
- Q.add(s);
- is_in_queue[s] = true;
- //3.核心
- while(!Q.isEmpty()){
- int u = Q.remove(0);
- is_in_queue[u] = false;
- List<Pair> list = G.getListByVertexIndex(u);
- Iterator<Pair> iter = list.iterator();
- while(iter.hasNext()){
- Pair vstr = iter.next();
- int v = G.getVertexIndex(vstr.end);
- if(d[v]>d[u]+vstr.weight){
- d[v] = d[u] + vstr.weight;
- if(!is_in_queue[v]){ //如果松弛的点不在队列中,则加入队列;如果在队列中,则不动
- Q.add(v);
- is_in_queue[v] = true;
- }
- }
- }
- }
- return d;
- }
- public static void main(String[] args) throws Exception {
- SPFA spfa_alg = new SPFA();
- Weighted_Adjacent_List g = GraphFactory.getWeightedAdjacentListInstance("input\\weighted_graph.txt");
- int[] d = spfa_alg.spfa(g,"s");
- for(int i=0;i<d.length;i++){
- System.out.println(g.getVertexValue(i)+":"+d[i]);
- }
- }
- }
版权声明:本文为博主原创文章,未经博主允许不得转载。
Dijkstra、Bellman_Ford、SPFA、Floyd算法复杂度比较的更多相关文章
- 【转载】Dijkstra算法和Floyd算法的正确性证明
说明: 本文仅提供关于两个算法的正确性的证明,不涉及对算法的过程描述和实现细节 本人算法菜鸟一枚,提供的证明仅是自己的思路,不保证正确,仅供参考,若有错误,欢迎拍砖指正 ----------- ...
- Dijkstra算法和Floyd算法的正确性证明
说明: 本文仅提供关于两个算法的正确性的证明,不涉及对算法的过程描述和实现细节 本人算法菜鸟一枚,提供的证明仅是自己的思路,不保证正确,仅供参考,若有错误,欢迎拍砖指正 ------------- ...
- 最短路径——Dijkstra算法和Floyd算法
Dijkstra算法概述 Dijkstra算法是由荷兰计算机科学家狄克斯特拉(Dijkstra)于1959 年提出的,因此又叫狄克斯特拉算法.是从一个顶点到其余各顶点的最短路径算法,解决的是有向图(无 ...
- 最短路径Dijkstra算法和Floyd算法整理、
转载自:http://www.cnblogs.com/biyeymyhjob/archive/2012/07/31/2615833.html 最短路径—Dijkstra算法和Floyd算法 Dijks ...
- 【转】最短路径——Dijkstra算法和Floyd算法
[转]最短路径--Dijkstra算法和Floyd算法 标签(空格分隔): 算法 本文是转载,原文在:最短路径-Dijkstra算法和Floyd算法 注意:以下代码 只是描述思路,没有测试过!! Di ...
- 四大算法解决最短路径问题(Dijkstra+Bellman-ford+SPFA+Floyd)
什么是最短路径问题? 简单来讲,就是用于计算一个节点到其他所有节点的最短路径. 单源最短路算法:已知起点,求到达其他点的最短路径. 常用算法:Dijkstra算法.Bellman-ford算法.SPF ...
- 最短路径—Dijkstra算法和Floyd算法
原文链接:http://www.cnblogs.com/biyeymyhjob/archive/2012/07/31/2615833.html 最后边附有我根据文中Dijkstra算法的描述使用jav ...
- 最短路径—大话Dijkstra算法和Floyd算法
Dijkstra算法 算法描述 1)算法思想:设G=(V,E)是一个带权有向图,把图中顶点集合V分成两组,第一组为已求出最短路径的顶点集合(用S表示,初始时S中只有一个源点,以后每求得一条最短路径 , ...
- 最短路径—Dijkstra算法和Floyd算法【转】
本文来自博客园的文章:http://www.cnblogs.com/biyeymyhjob/archive/2012/07/31/2615833.html Dijkstra算法 1.定义概览 Dijk ...
随机推荐
- 关于IScroll使用中的常见问题与解决方案
1.在iscroll4的滚动容器范围内,点击input框.select等表单元素时没有响应这个问题原因在于iscroll需要一直监听用户的touch操作,以便灵敏的做出对应效果,所以它把其余的默认事件 ...
- Redis笔记 -- 链表和链表节点的API函数(三)
链表和链表节点API 函数 作用 时间复杂度 listSetDupMethod 将给定的函数设置为链表的节点值复制函数 复制函数可以通过链表的dup属性直接获得,O(1) listGetDupMeth ...
- 大数据时代数据库-云HBase架构&生态&实践
业务的挑战 存储量量/并发计算增大 现如今大量的中小型公司并没有大规模的数据,如果一家公司的数据量超过100T,且能通过数据产生新的价值,基本可以说是大数据公司了 .起初,一个创业公司的基本思路就是首 ...
- 嵌入式C语言自我修养 08:变参函数的格式检查
8.1 属性声明:format GNU 通过 __atttribute__ 扩展的 format 属性,用来指定变参函数的参数格式检查. 它的使用方法如下: __attribute__(( forma ...
- 树莓3B+_apt-get update && apt-get upgrade
在Windows下安装软件,我们只需要有EXE文件,然后双击,下一步直接OK就可以了.但在LINUX下,不是这样的.每个LINUX的发行版,都会维护一个自己的软件仓库,我们常用的几乎所有软件都在这里面 ...
- django中models的filter过滤方法
__gt 大于__gte 大于等于 __lt 小于 __lte 小于等于 __in 存在于一个list范围内 __startswith 以...开头 __is ...
- Oracle Data Provider for .NET Support for Microsoft .NET Core
Oracle Data Provider for .NET Support for Microsoft .NET Core的官方地址,记录下来,按照官方描述,会在2017年底左右发布,暂时还没有看到相 ...
- 20155318 《Java程序设计》实验三 (敏捷开发与XP实践)实验报告
20155318 <Java程序设计>实验三 (敏捷开发与XP实践)实验报告 实验内容 XP基础 XP核心实践 相关工具 实验步骤 (一)敏捷开发与XP 软件工程是把系统的.有序的.可量化 ...
- 2016-2017-2 20155339《 java面向对象程序设计》实验四Android程序设计
2016-2017-2 20155339< java面向对象程序设计>实验四Android程序设计 实验内容 1.Android Stuidio的安装测试: 参考<Java和Andr ...
- iOS 的音频播放
一.Audio Toolbox 1.使用代码 #import <AudioToolbox/AudioToolbox.h> AudioServicesPlaySystemSound(1106 ...