【算法】单源最短路径和任意两点最短路径总结(补增:SPFA)
【Bellman-Ford算法】
【算法】Bellman-Ford算法(单源最短路径问题)(判断负圈)
结构:
#define MAX_V 10000
#define MAX_E 50000
int V,E; //顶点和边的数量
struct edge{
int from,to,cost;
};
edge es[MAX_E];//边集
int d[MAX_V]; //d[i]表示从某个点出发到i的最短路径
算法特点:1.每次都用所有的边更新所有的边,直到无可更新为止。
2.无负圈最多更新 V-1 次,否则有负圈。
【dijkstra算法】
【算法】Dijkstra算法(单源最短路径问题)(路径还原) 邻接矩阵和邻接表实现
结构1:
#define MAX_V 10000
#define MAX_E 50000
int cost[MAX_V][MAX_V]; //cost[u][v]表示e = (u,v)的权值
int d[MAX_V]; //源点s出发的最短距离
bool used[MAX_V]; //标记使用过的点
int V; //顶点数
算法特点:1.每次都找没使用过的 d 最小的点,用这个点更新其他点。
2.不能解决有负圈的图。
结构2:
#define MAX_V 10000
#define MAX_E 50000
int V; //顶点数
int d[MAX_V]; // d[i]表示i离源点的最短距离
struct edge{ int to,cost; };
typedef pair<int, int> P; //first是最短距离,second是顶点的编号
vector <edge> G[MAX_V]; // 边集
算法特点:1.用之前更新过的点,来更新其他点,直到无点可更新。
2.不能解决有负圈的图。
【Floyd-Warshall算法】
【算法】Floyd-Warshall算法(任意两点间的最短路问题)(判断负圈)
结构:
#define MAX_V 10000
#define MAX_E 50000
int d[MAX_V][MAX_V]; // d[u][v]表示边e=(u,v)的权值(不存在时设为INF,不过d[i][i] = 0)
int V; // 顶点数
算法特点:1.dp[i][j] = min(dp[i][j] , dp[i][k] + d[k][j]);
基于只有k-1个点的情况,从加入第k个点和不加第k个点中做选择。
2.能解决有负圈的图,如果d[i][i]出现负数说明有负圈。
拜读了一位大神的blog学会了SPFA算法:
稠密图用Dijkstra,稀疏图用SPFA。
【算法】单源最短路径和任意两点最短路径总结(补增:SPFA)的更多相关文章
- javascript实现有向无环图中任意两点最短路径的dijistra算法
有向无环图 一个无环的有向图称做有向无环图(directed acycline praph).简称DAG 图.DAG 图是一类较有向树更一般的特殊有向图, dijistra算法 摘自 http://w ...
- Dijkstra算法——单源最短路径问题
学习一个点到其余各个顶点的最短路径--单源最短路径 Dijkstra算法是由荷兰计算机科学家狄克斯特拉于1959 年提出的,因此又叫狄克斯特拉算法.是从一个顶点到其余各顶点的最短路径算法,解决的是有向 ...
- warshall-floyd算法:POJ No 2139 Six Degress of Cowvin Bacon(任意两点最短路径))
题目: http://poj.org/problem?id=2139 题解:N只牛,在一组的两只牛,分别两只之间为 “1度”,自己到自己为0度,M组牛.求,N只牛之中,两只牛之间 平均最短度数*100 ...
- 算法基础⑧搜索与图论--dijkstra(迪杰斯特拉)算法求单源汇最短路的最短路径
单源最短路 所有边权都是正数 朴素Dijkstra算法(稠密图) #include<cstdio> #include<cstring> #include<iostream ...
- Atcoder Beginner Contest151D(迷宫问题求任意两点最短路径的最大值,BFS)
BFS可以求得最短路,DFS会找到从当前点到图中叶子结点的路径. #define HAVE_STRUCT_TIMESPEC #include<bits/stdc++.h> using na ...
- Dijkstra算法——单源最短路算法
一.介绍 迪杰斯特拉(Dijkstra)算法是典型最短路径算法,用于计算一个节点到其他各个节点的最短路径. 它的主要特点是以起始点为中心向外层层扩展(广度优先搜索思想),直到扩展到终点为止. 适用于有 ...
- git是一种分布式代码管理工具,git通过树的形式记录文件的更改历史,比如: base'<--base<--A<--A' ^ | --- B<--B' 小米工程师常常需要寻找两个分支最近的分割点,即base.假设git 树是多叉树,请实现一个算法,计算git树上任意两点的最近分割点。 (假设git树节点数为n,用邻接矩阵的形式表示git树:字符串数组matrix包含n个字符串,每个字符串由字符'0
// ConsoleApplication10.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include <iostream& ...
- 单源最短路径-迪杰斯特拉算法(Dijkstra's algorithm)
Dijkstra's algorithm 迪杰斯特拉算法是目前已知的解决单源最短路径问题的最快算法. 单源(single source)最短路径,就是从一个源点出发,考察它到任意顶点所经过的边的权重之 ...
- 单源最短路径Dijkstra算法,多源最短路径Floyd算法
1.单源最短路径 (1)无权图的单源最短路径 /*无权单源最短路径*/ void UnWeighted(LGraph Graph, Vertex S) { std::queue<Vertex&g ...
随机推荐
- Redis学习笔记(八) 基本命令:SortedSet操作
原文链接:http://doc.redisfans.com/sorted_set/index.html SortedSet的数据结构类似于Set,不同的是Sorted中的每个成员都分配了一个值(Sco ...
- Solidworks.2016.SP5下载安装破解图文教程
安装此软件一定要断网安装!!!下载完成后解压文件,打开破解文件夹,双击文件夹中的SolidWorksSerialNumbers2016.reg进行注册表注册,如下图. 解压软件安装包(或者将软件安 ...
- Five Invaluable Techniques to Improve Regex Performance
Regular expressions are powerful, but with great power comes great responsibility. Because of the wa ...
- apache include 文件包含引用的方法 报错 [an error occurred while processing this directive]
今天遇到在某平台买的虚拟主机服务器不支持 下面的这样的写法 <!--#Include file="/templets/2013new/header.htm"--> ...
- Kattis - ACM Contest Scoring
ACM Contest Scoring Our new contest submission system keeps a chronological log of all submissions m ...
- 转载:常用 Git 命令清单
转载:常用 Git 命令清单 原文地址:http://www.ruanyifeng.com/blog/2015/12/git-cheat-sheet.html 作者: 阮一峰 我每天使用 Git , ...
- 【HNOI】合唱队
[HNOI]合唱队 题意 对于一个初始序列,保证两两不同,通过一些变换得到目标序列: 第一个值直接插入空的当前队列 对于从第二个值开始的每个值 如果原序列中 $ a[i] $,若 $ a[i]> ...
- Android开发新手HelloWorld解析
首先看这个 HelloWorld 类. Java代码public class HelloWorld extends Activity { /** Called when the activ ...
- 浅谈 Qt 布局那些事
Qt 布局那些事是本文介绍的内容,直接进入主题.GridLayout是一个非常强大的布局管理器,它可以实现很多复杂的布局,名字中暗示它将所有控件放置在类似网格的布局中.^__^GridLayout有两 ...
- MyEclipse 设置JSP,HTML的默认打开方式,避免出现打开后上面出现浏览器
1. 2. 3. jsp的设置一样,这样myeclipse打开jsp就不会出现上面的浏览器了