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 ...
随机推荐
- 需求:promise执行买菜做饭过程
需求:promise执行买菜做饭过程 1.买菜 2.洗菜 3.做饭 4.吃饭 <!DOCTYPE html> <html lang="en"> <he ...
- redis必会
1.NosqL 非关系型数据库,里面包含Redis和MondoDB2.为什么会用到关系型数据库?因为当数据量太多,访问人数过多的时候,在访问关系型数据库时会到硬盘里进行读写过多 这样就会导致访问速度很 ...
- python中用Pillow库进行图片处理
一.Python中 PIL 图像处理库简介 PIL可以做很多和图像处理相关的事情: 图像归档(Image Archives).PIL非常适合于图像归档以及图像的批处理任务.你可以使用PIL创建缩略图, ...
- postgres 输出数据集的自定义函数
定义一个可输出数据集自定义函数有多种方法 1,先定义结构,再使用结构输出结果 CREATE TYPE compfoo AS (f1 int, f2 text); CREATE FUNCTION get ...
- 20155212 2016-2017-2 《Java程序设计》第2周学习总结
20155212 2016-2017-2 <Java程序设计>第2周学习总结 教材学习内容总结 三种print System.out.println:在标准输出中显示文字后换行. Syst ...
- 20155306 2016-2017-2 《Java程序设计》第1周学习总结
20155306 2006-2007-2 <Java程序设计>第1周学习总结 教材学习内容总结 第一章 Java有三大平台:Java EE, Java SE, Java ME Java S ...
- 20155313 2016-2017-2 《Java程序设计》第四周学习总结
20155313 2016-2017-2 <Java程序设计>第四周学习总结 教材学习内容总结 6 继承与多态 面对对象中,子类继承父类,避免重复的行为定义,不过并非为了避免重复定义行为就 ...
- WPF 带水印的密码输入框
原文:WPF 带水印的密码输入框 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/BYH371256/article/details/83652540 ...
- RHCSA-day1
1. 破解密码 开机 e 进入编辑模式 linux16 /boot/.............................en_US.UTF_8 这行末尾插入 rd.break (空格) ctrl ...
- 【LG3321】[SDOI2015]序列统计
[LG3321][SDOI2015]序列统计 题面 洛谷 题解 前置芝士:原根 我们先看一下对于一个数\(p\),它的原根\(g\)有什么性质(好像就是定义): \(g^0\%p,g^1\%p,g^2 ...