朴素SPFA(链表建边)

#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <queue>
#define MAXN 1000008
#define INF 2147483647 using namespace std; int first[MAXN], next[MAXN];
int u[MAXN], v[MAXN], w[MAXN];
int dis[MAXN];
bool vis[MAXN];
int n, m, s;
queue<int> P; int main() {
memset(first, -, sizeof(first));
scanf("%d%d%d", &n, &m, &s);
for(int i=; i<=n; i++) {
dis[i] = INF;
}
dis[s] = ;
for(int i=; i<=m; i++) {
scanf("%d%d%d", &u[i], &v[i], &w[i]);
next[i] = first[u[i]];
first[u[i]] = i;
}
P.push(s), vis[s] = ;
while(!P.empty()) {
int x = P.front();
int k = first[x];
P.pop();
while(k != -) {
if(dis[v[k]] > dis[u[k]]+w[k]) {
dis[v[k]] = dis[u[k]]+w[k];
if(vis[v[k]] == ) {
P.push(v[k]);
vis[v[k]] = ;
}
}
k = next[k];
}
vis[x] = ;
}
for(int i=; i<=n; i++) {
printf("%d ", dis[i]);
}
return ;
}

朴素dijkstra(链表建边)

#include <iostream>
#include <cstdio>
#include <cstring>
#include <cmath>
#include <algorithm>
#define MAXN 500000
#define INF 2147483647 using namespace std; int first[MAXN], next[MAXN];
int u[MAXN], v[MAXN], w[MAXN];
int dis[MAXN];
bool book[MAXN];
int n, m, s; int main() {
scanf("%d%d%d", &n, &m, &s);
memset(first, -, sizeof(first));
for(int i=; i<=n; i++) {
dis[i] = INF;
}
dis[s] = ;
for(int i=; i<=m; i++) {
scanf("%d%d%d", &u[i], &v[i], &w[i]);
next[i] = first[u[i]];
first[u[i]] = i;
}
//book[s] = 1;
for(int i=; i<n; i++) {
int minn = INF, x;
for(int j=; j<=n; j++) {
if(dis[j] < minn&&book[j] == ) {
minn = dis[j];
x = j;
}
}
book[x] = ;
int k = first[x];
while(k != -) {
if(dis[v[k]] > dis[u[k]]+w[k]) {
dis[v[k]] = dis[u[k]]+w[k];
}
k = next[k];
}
}
for(int i=; i<=n; i++) {
printf("%d ", dis[i]);
}
}

Floyd(矩阵建边)

#include <iostream>
#include <cstdio>
#include <cmath>
#include <cstring>
#define INF 214748364 using namespace std; int n, m, s, t;
int dis[][]; int main() {
scanf("%d%d", &n, &m);
for(int i=; i<=n; i++) {
for(int j=; j<=n; j++) {
dis[i][j] = (i == j)?:INF;
}
}
for(int i=; i<=m; i++) {
int u, v, w;
scanf("%d%d%d", &u, &v, &w);
dis[u][v] = w;
dis[v][u] = w;
}
for(int k=; k<=n; k++) {
for(int i=; i<=n; i++) {
for(int j=; j<=n; j++) {
if(dis[i][j] > dis[i][k]+dis[k][j]) {
dis[i][j] = dis[i][k]+dis[k][j];
}
}
}
}
scanf("%d%d", &s, &t);
printf("%d", dis[s][t]);
}

最短路算法模板SPFA、disjkstra、Floyd的更多相关文章

  1. 最短路算法模板--SPFA

    初见SPFA时,直接认成了优先队列优化的Dijkstra,经过几位大佬的指点,我终于明白了他们的差异. Dijkstra是保证已经出队过的点不再入队,SPFA是已经在队列中不再入队.比较起来,SPFA ...

  2. 图论之最短路算法之SPFA算法

    SPFA(Shortest Path Faster Algorithm)算法,是一种求最短路的算法. SPFA的思路及写法和BFS有相同的地方,我就举一道例题(洛谷--P3371 [模板]单源最短路径 ...

  3. 基础最短路(模板 spfa)

    Description 虽然草儿是个路痴(就是在杭电待了一年多,居然还会在校园里迷路的人,汗~),但是草儿仍然很喜欢旅行,因为在旅途中 会遇见很多人(白马王子,^0^),很多事,还能丰富自己的阅历,还 ...

  4. 最短路算法模板合集(Dijkstar,Dijkstar(优先队列优化), 多源最短路Floyd)

    再开始前我们先普及一下简单的图论知识 图的保存: 1.邻接矩阵. G[maxn][maxn]; 2.邻接表 邻接表我们有两种方式 (1)vector< Node > G[maxn]; 这个 ...

  5. 图论算法(二)最短路算法:Floyd算法!

    最短路算法(一) 最短路算法有三种形态:Floyd算法,Shortset Path Fast Algorithm(SPFA)算法,Dijkstra算法. 我个人打算分三次把这三个算法介绍完. (毕竟写 ...

  6. 最短路问题的三种算法&模板

    最短路算法&模板 最短路问题是图论的基础问题.本篇随笔就图论中最短路问题进行剖析,讲解常用的三种最短路算法:Floyd算法.Dijkstra算法及SPFA算法,并给出三种算法的模板.流畅阅读本 ...

  7. (最短路径算法整理)dijkstra、floyd、bellman-ford、spfa算法模板的整理与介绍

    这一篇博客以一些OJ上的题目为载体.整理一下最短路径算法.会陆续的更新... 一.多源最短路算法--floyd算法 floyd算法主要用于求随意两点间的最短路径.也成最短最短路径问题. 核心代码: / ...

  8. 最短路算法 -- SPFA模板

    一.算法步骤 建立一个队列,初始时队列里只有起始点,再建立一个数组记录起始点到所有点的最短路径(该数组的初始值要赋为极大值,该点到它本身的路径赋为0,下面的模板中该数组为dist[]).然后执行松弛操 ...

  9. UESTC - 1987 童心未泯的帆宝和乐爷 (第k短路 A*算法+SPFA算法 模板)

    传送门: http://www.qscoj.cn/#/problem/show/1987 童心未泯的帆宝和乐爷 Edit Time Limit: 10000 MS     Memory Limit: ...

随机推荐

  1. 关于js的语句类型运算符等

    JavaScript的基本语句有以下几种: 1.for(判断条件){执行内容}: 2.if(条件){...}else{ ....}: 3.while(条件){....}:先判断条件再执行: do{.. ...

  2. 【BZOJ1012】【JSOI2008】最大数(线段树)

    [JSOI2008]最大数 题目描述 现在请求你维护一个数列,要求提供以下两种操作: 1. 查询操作. 语法:Q L 功能:查询当前数列中末尾L个数中的最大的数,并输出这个数的值. 限制:L不超过当前 ...

  3. 【CJOJ1372】【洛谷2730】【USACO 3.2.5】魔板

    题面 Description 在成功地发明了魔方之后,鲁比克先生发明了它的二维版本,称作魔板.这是一张有8个大小相同的格子的魔板: 1 2 3 4 8 7 6 5 我们知道魔板的每一个方格都有一种颜色 ...

  4. Couldn't save uncommitted changes.

    关于idea切换分支报错的问题. Couldn't save uncommitted changes. Tried to save uncommitted changes in stash befor ...

  5. ajax 上传文件

    最近做公司官网,需要用到上传文件功能,由于是用JQ写的,用到了input标签 的type=file 属性,然后利用表单提交方式上传,代码如下: $('#upload_video').change(fu ...

  6. Django---第三方

    第三方: 3.富文本编辑器:此处以tinymce为例 使用编辑器的显示效果为: 1.下载安装 在网站pypi网站搜索并下载"django-tinymce-2.4.0" 解压 tar ...

  7. IIS前端页面不显示详细错误解决方法

    要想解决这个问题,有三种方法可以考虑: 1.Internet信息服务(IIS)管理器 2.Web.config文件 3. 命令行 在IIS的"错误页"右边的"编辑功能设置 ...

  8. PAT乙级-1041. 考试座位号(15)

    每个PAT考生在参加考试时都会被分配两个座位号,一个是试机座位,一个是考试座位.正常情况下,考生在入场时先得到试机座位号码,入座进入试机状态后,系统会显示该考生的考试座位号码,考试时考生需要换到考试座 ...

  9. git仓库搭建及客户端使用

    这里只在linux上做git仓库搭建 这里只在linux上做git仓库搭建 这里只在linux上做git仓库搭建 linux 服务器上安装及配置git 一.安装git yum install -y g ...

  10. 数据定义: CREATE、DROP、ALTER

    CREATE DATABASE 句法 CREATE DATABASE [IF NOT EXISTS] db_name 数据库.表.索引.列和别名 中被给出. 如果数据库已经存在,并且你没有指定 IF ...