【算法】单源最短路径和任意两点最短路径总结(补增: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 ...
随机推荐
- Jquery validform
一.validform是什么? validform是一款智能的表单验证js插件,它是基于jQuery库与css,我们只需要把表单对象放入, 就可以对整个表 ...
- Rabbit MQ 学习 (二)
接连上一篇 :安装Erlang环境 之后,这篇安装 Rabbit Server 官网下载安装包:http://www.rabbitmq.com/install-windows.html 打开安装一路下 ...
- sql server 随机生成布尔值
) AS BIT) 或者 )
- AVL数
平衡二叉树(AVL树) AVL树是一种二叉搜索树,并且每个节点的左右子树高度之差最多为1.AVL树是第一个在最坏的情况下保证以O(logn)的时间进行搜索,插入和删除操作的数据结构,AVL树能在对数时 ...
- scp 命令简明介绍
安全复制(英语:Secure copy,缩写SCP)是指在本地主机与远程主机或者两台远程主机之间基于Secure Shell(SSH)协议安全地传输电脑文件."SCP"通常指安全复 ...
- ScSPM & LLC
为啥会有SPM→ScSPM呢?原因之一是为了寻找better coding + better pooling的方式提高性能,原因之二就是提高速度.如何提高速度?这里的速度,不是Coding+Pooli ...
- npm run eject 命令后出现This git repository has untracked files or uncommitted changes错误
npm run eject 暴露隐藏的文件,不可逆 结果出现下面的问题 This git repository has untracked files or uncommitted changes: ...
- linux下为firfox安装flash player
1.去官网下载×.tar.gz包,如:flash_player_npapi_linux.x86_64.tar.gz 2.解压 tar -zxvf flash_player_npapi_linux.x8 ...
- 首页 > 所有书 > 操作系统 > Linux >
http://book.51cto.com/col/1213/list_1213_8.htm linux一些经典教材
- snprintf
snprintf(),函数原型为int snprintf(char *str, size_t size, const char *format, ...). 将可变参数 “…” 按照format的 ...