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 ...
 
随机推荐
- tomcat 远程debug配置,教你远程调试代码,解决线上故障
			
IDEA远程DEBUG Tomcat很简单,配置如下: 1.修改tomcat服务器配置 打开tomcat/bin/catalina.sh 在空白处添加如下参数 CATALINA_OPTS=&quo ...
 - 虚拟机与ARM之间的交叉编译总结
			
通过三大服务的配置,我们可以在ARM中下载内核和文件系统.我们通过在虚拟机中编程,得到的程序不能在ARM中运行,需要经过一个交叉编译.得到的可执行程序可以在ARM中运行,此时不能在虚拟机Linux中运 ...
 - 小白该如何学习Linux操作系统
			
一. 选择适合自己的Linux发行版 谈到linux的发行版别,太多了,可能谁也不能给出一个准确的数字,但是有一点是能够必定的,linux正在变得越来越盛行, 面临这么多的Linux 发行版,打算从别 ...
 - Linux使用scp命令进行文件远程拷贝详解
			
前言 scp是 secure copy的缩写, scp是Linux系统下基于ssh登陆进行安全的远程文件拷贝命令.Linux的scp命令可以在Linux服务器之间复制文件和目录. 使用语法: scp ...
 - Linux服务器间文件实时同步的实现
			
使用场景 现有服务器A和服务器B,如果服务器A的指定目录(例如 /home/paul/rsync/ )中的内容发生变更(增删改和属性变更),实时将这些变更同步到服务器B的目标目录中(例如 /home/ ...
 - 检测com端口代码实现
			
1:scan HRESULT CDevHound::Scan(const vector<CString> &guiInfo, vector<DEV_INFO> & ...
 - (转载)Javascript异步编程的4种方法
			
你可能知道,Javascript语言的执行环境是"单线程"(single thread). 所谓"单线程",就是指一次只能完成一件任务.如果有多个任务,就必须排 ...
 - spark执行命令 监控执行命令
			
#!/bin/bash #/usr/hdp/current/flume-server/bin/flume-ng agent -c conf/ -f /usr/hdp/current/flume-ser ...
 - Makefile:如何写目标依赖
			
本文并不是Makefile的教程,仅是本人学习时的感悟. Makefile的基本格式 目标:依赖文件(or 目标) [tab]命令 目标: 是要生成的或操作的命令的索引 依赖: 是生成目标依赖的文件或 ...
 - 20155226 实验四 Android开发基础
			
20155226第四次实验报告 一.实验内容及步骤 Android Stuidio的安装测试: 安装 Android Stuidio 完成Hello World, 要求修改res目录中的内容,Hell ...