【算法】单源最短路径和任意两点最短路径总结(补增: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 ...
随机推荐
- ROS命令参考
前言:整理一些ROS常用命令,参考自:<ROS机器人编程>. 一.ROS执行命令 二.ROS信息命令 三.ROS catkin命令 四.ROS功能包命令 -END-
- ROS-多机通信
前言:一定要在同一路由的局域网下进行,就是两台电脑的ip要像这样:192.168.191.4和192.168.191.8,只有最后一位不同,这样就能ping通了,否则ping不同. 一.查看ip和主机 ...
- 一个基于Vue.js+Mongodb+Node.js的博客内容管理系统
这个项目最初其实是fork别人的项目.当初想接触下mongodb数据库,找个例子学习下,后来改着改着就面目全非了.后台和数据库重构,前端增加了登录注册功能,仅保留了博客设置页面,但是也优化了. 一.功 ...
- Paper-[arXiv 1710.03144]Island Loss for Learning Discriminative Features in Facial Expression
[arXiv 1710.03144]Island Loss for Learning Discriminative Features in Facial Expression ABSTRACT 作者在 ...
- svn: E155017: Checksum mismatch while updating 校验错误的解决方法
[10.3.53.53:/EMRCV5]# svn up svn: E155004: Working copy '/EMRCV5' locked. svn: E155004: '/EMRCV5' is ...
- day21 模块
目录 模块 import 与 from...import 循环导入问题 解决方案一 解决方案二 Python文件的两种用途 从普通的面条型代码,到函数型代码,其实是在做什么? 封装代码,一个函数差不多 ...
- zabbix_agent代理端监控FTP服务
(FTP服务器) 监控agent的Linux主机我们在之前就已经做好了,现在直接安装ftp服务即可 (可以看上一遍文章如何搭建监控端agent) 这里不过多演示 [root@agent ~]# yu ...
- Kz.layedit-layui.layedit富文本编辑器拓展
项目介绍 首先欢迎使用 Kz.layedit!本项目基于layui.layedit富文本编辑器,在其之上拓展而来. 新增功能 html源码模式.插入hr水平线.段落格式.字体颜色.字体背景色.批量上传 ...
- Java String 字符串截取和获取文件的上级目录
public String test() { String root = ServletActionContext.getServletContext().getRealPath("/&qu ...
- Golang-import-introduce
本文主要讲解golang中import关键字的用法 import( "fmt" ) //然后在代码里面可以通过如下的方式调用 fmt.Println("hello wor ...