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 ...
随机推荐
- 写 5 个你知道的 HTML5 标签,说明他们的意义
1:<canvas>标签 定义图形.图像,是基于javascript的绘图API 2:<video>标签 定义视频 3:<audio>标签 定义音频内容 ...
- python学习笔记:第9天 函数初步
1. 函数的定义及调用 函数:所谓的函数可以看作是对一段代码的封装,也是对一个功能模块的封装,这样方便在下次想用这个功能的时候直接调用这个功能模块,而不用重新去写. 函数的定义:我们使用def关键字来 ...
- Python图形界面Tk
最近在学习Python,在使用Tkinter做图形界面时遇到了几个小问题,网上查了一下,在Python2.x导入的是Tkinter,Python3则是tkinter.而且导入的simpledialog ...
- 修改并编译golang源码
最近为了做Hyperledger Fabric国密改造,涉及到了golang源码的改动.特将操作过程整理如下,以供参考: golang的源码安装其实比较简单,只需运行源码包中的脚本src/all.ba ...
- Python之路(三)
今天这篇文章是对上一篇文章的补充,主要说一下与int和str有关的几个函数. ------------------------------------------------------------( ...
- Linux入门进阶第三天——软件安装管理(下)
一.yum在线安装 之前的rpm包各种依赖性太强!安装复杂,yum的好处就来了: // yum 在redhat是付费服务 1.yum源文件 先进入到yum目录: 我们打开默认生效的Base包 2.光盘 ...
- 201552-53 《Java程序设计》第五周问题汇总
201552-53 <Java程序设计>第五周问题汇总 1.编译时,终端显示: 注:XXX.java使用了未经检查或不安全的操作,如何解决? 解答:并不是错误,可以忽视. 2.构造函数与类 ...
- 一个命令安装lnmp
安装LNMP执行:wget -c http://soft.vpser.net/lnmp/lnmp1.3-full.tar.gz && tar zxf lnmp1.3-full.tar. ...
- 微信小程序居中代码
html页面: { text-align:center; } wxss页面: { width: 100%; height: 100%; display: flex; justify-content: ...
- [转]理解Linux文件系统之inode
很少转发别人的文章,但是这篇写的太好了. 理解inode 作者: 阮一峰 inode是一个重要概念,是理解Unix/Linux文件系统和硬盘储存的基础. 我觉得,理解inode,不仅有助于提高系统 ...