单源最短路模板 + hdu - 2544
Floyd
Floyd 本质上类似一种动态规划,dp [ i ] [ j ] = dp [ i ] [ k ] + dp[ k ] [ j ]。
/**
* Night gathers, and now my watch begins.
* It shall not end until my death.
* I shall take no wife, hold no lands, father no children.
* I shall wear no crowns and win no glory.
* I shall live and die at my post.
* I am the sword in the darkness.
* I am the watcher on the walls.
* I am the fire that burns against the cold,
* the light that wakes the sleepers,
* the shield that guards the realms of men.
* I pledge my life and honor to the Night's Watch,
* for this night,
* and all the nights to come.
*/
#include<bits/stdc++.h>
#define lson i<<2
#define rson i<<2|1
#define LS l,mid,lson
#define RS mid+1,r,rson
#define mem(a,x) memset(a,x,sizeof(a))
#define gcd(a,b) __gcd(a,b)
#define ll long long
#define ull unsigned long long
#define lowbit(x) (x&-x)
#define enld endl
#define mian main
#define itn int
#define prinft printf
const double PI = acos (-1.0);
const int INF = 0x3f3f3f3f;
;
;
;
;
using namespace std;
int Map[MAXN][MAXN];
int n, m, q;
int a, b, c;
void Floyd () {
; k < n; k++)
; i <= n; i++)
; j <= n; j++)
Map[i][j] = min (Map[i][j], Map[i][k] + Map[k][j]);
}
int main() {
while (cin >> n >> m >> q) {
; i <= n; i++)
; j <= n; j++)
Map[i][j] = INF;
; i <= m; i++) {
cin >> a >> b >> c;
Map[a][b] = Map[b][a] = min (Map[a][b], c);
}
Floyd();
; i <= q; i++) {
cin >> a >> b;
cout << Map[a][b] << endl;
}
}
;
}
Floyd
/**
* Night gathers, and now my watch begins.
* It shall not end until my death.
* I shall take no wife, hold no lands, father no children.
* I shall wear no crowns and win no glory.
* I shall live and die at my post.
* I am the sword in the darkness.
* I am the watcher on the walls.
* I am the fire that burns against the cold,
* the light that wakes the sleepers,
* the shield that guards the realms of men.
* I pledge my life and honor to the Night's Watch,
* for this night,
* and all the nights to come.
*/
#include<bits/stdc++.h>
#define lson i<<2
#define rson i<<2|1
#define LS l,mid,lson
#define RS mid+1,r,rson
#define mem(a,x) memset(a,x,sizeof(a))
#define gcd(a,b) __gcd(a,b)
#define ll long long
#define ull unsigned long long
#define lowbit(x) (x&-x)
#define enld endl
#define mian main
#define itn int
#define prinft printf
const double PI = acos (-1.0);
const int INF = 0x3f3f3f3f;
;
;
;
;
using namespace std;
int Map[MAXN][MAXN];
int n, m, q;
int a, b, c;
void Floyd () {
; k <= n; k++)
; i <= n; i++)
; j <= n; j++)
Map[i][j] = min (Map[i][j], Map[i][k] + Map[k][j]);
}
int main() {
while (~scanf ("%d%d", &n, &m) && n || m) {
; i <= n; i++)
; j <= n; j++)
Map[i][j] = INF;
; i <= m; i++) {
scanf ("%d%d%d", &a, &b, &c);
Map[a][b] = Map[b][a] = min (Map[a][b], c);
}
Floyd();
cout << Map[][n] << endl;
}
;
}
Dijkstra
从源点出发,首先寻找离源点最近的几个节点,now 储存现在离源点最近的节点的序号。
/**
* Night gathers, and now my watch begins.
* It shall not end until my death.
* I shall take no wife, hold no lands, father no children.
* I shall wear no crowns and win no glory.
* I shall live and die at my post.
* I am the sword in the darkness.
* I am the watcher on the walls.
* I am the fire that burns against the cold,
* the light that wakes the sleepers,
* the shield that guards the realms of men.
* I pledge my life and honor to the Night's Watch,
* for this night,
* and all the nights to come.
*/
#include<bits/stdc++.h>
#define lson i<<2
#define rson i<<2|1
#define LS l,mid,lson
#define RS mid+1,r,rson
#define mem(a,x) memset(a,x,sizeof(a))
#define gcd(a,b) __gcd(a,b)
#define ll long long
#define ull unsigned long long
#define lowbit(x) (x&-x)
#define enld endl
#define mian main
#define itn int
#define prinft printf
const double PI = acos (-1.0);
const int INF = 0x3f3f3f3f;
;
;
;
;
using namespace std;
int Map[MAXN][MAXN];
int dis[MAXN];
int vis[MAXN];
int n, m, q;
int a, b, c;
void Dijkstra (int src) {
mem (vis, );
; i <= n; i++)
dis[i] = INF;
dis[src] = ;
) {
;
; i <= n; i++)
|| dis[i] < dis[now]))
now = i;
)
break;
vis[now] = ;
; i <= n; i++)
dis[i] = min (dis[i], dis[now] + Map[now][i]);
cout<<now<<endl;
; i <= n; i++)
cout << dis[i] << ' ';
cout << endl;
}
}
int main() {
while (cin >> n >> m >> q) {
; i <= n; i++)
; j <= n; j++)
Map[i][j] = INF;
; i <= m; i++) {
cin >> a >> b >> c;
Map[a][b] = Map[b][a] = min (Map[a][b], c);
}
Dijkstra ();
; i <= q; i++) {
cin >> a >> b;
cout << dis[i] << endl;
}
}
;
}
Dijkstra
/**
* Night gathers, and now my watch begins.
* It shall not end until my death.
* I shall take no wife, hold no lands, father no children.
* I shall wear no crowns and win no glory.
* I shall live and die at my post.
* I am the sword in the darkness.
* I am the watcher on the walls.
* I am the fire that burns against the cold,
* the light that wakes the sleepers,
* the shield that guards the realms of men.
* I pledge my life and honor to the Night's Watch,
* for this night,
* and all the nights to come.
*/
#include<bits/stdc++.h>
#define lson i<<2
#define rson i<<2|1
#define LS l,mid,lson
#define RS mid+1,r,rson
#define mem(a,x) memset(a,x,sizeof(a))
#define gcd(a,b) __gcd(a,b)
#define ll long long
#define ull unsigned long long
#define lowbit(x) (x&-x)
#define enld endl
#define mian main
#define itn int
#define prinft printf
const double PI = acos (-1.0);
const int INF = 0x3f3f3f3f;
;
;
;
;
using namespace std;
int Map[MAXN][MAXN];
int dis[MAXN];
int vis[MAXN];
int n, m, q;
int a, b, c;
void Dijkstra (int src) {
mem (vis, );
; i <= n; i++)
dis[i] = INF;
dis[src] = ;
) {
;
; i <= n; i++)
|| dis[i] < dis[now]))
now = i;
)
break;
vis[now] = ;
; i <= n; i++)
dis[i] = min (dis[i], dis[now] + Map[now][i]);
cout<<now<<endl;
; i <= n; i++)
cout << dis[i] << ' ';
cout << endl;
}
}
int main() {
while (cin >> n >> m >> q) {
; i <= n; i++)
; j <= n; j++)
Map[i][j] = INF;
; i <= m; i++) {
cin >> a >> b >> c;
Map[a][b] = Map[b][a] = min (Map[a][b], c);
}
Dijkstra ();
; i <= q; i++) {
cin >> a >> b;
cout << dis[i] << endl;
}
}
;
}
SPFA
将每次被松弛了的节点入队,直到队列为空,得到的就是源点到各节点的最短路。
/**
* Night gathers, and now my watch begins.
* It shall not end until my death.
* I shall take no wife, hold no lands, father no children.
* I shall wear no crowns and win no glory.
* I shall live and die at my post.
* I am the sword in the darkness.
* I am the watcher on the walls.
* I am the fire that burns against the cold,
* the light that wakes the sleepers,
* the shield that guards the realms of men.
* I pledge my life and honor to the Night's Watch,
* for this night,
* and all the nights to come.
*/
#include<bits/stdc++.h>
#define lson i<<2
#define rson i<<2|1
#define LS l,mid,lson
#define RS mid+1,r,rson
#define mem(a,x) memset(a,x,sizeof(a))
#define gcd(a,b) __gcd(a,b)
#define ll long long
#define ull unsigned long long
#define lowbit(x) (x&-x)
#define enld endl
#define mian main
#define itn int
#define prinft printf
const double PI = acos (-1.0);
const int INF = 0x3f3f3f3f;
;
;
;
;
using namespace std;
//邻接表实现
struct node {
int to, cost;
node (int a, int b) {
to = a, cost = b;
}
};
vector<node> edge[MAXN];
int vis[MAXN]; //可以用map
int dis[MAXN];
int n, m;
int a, b, c;
queue<int> q;
void spfa (int src) {
mem (vis, );
vis[src] = ;
dis[src] = ;
q.push (src);
while (!q.empty()) {
int now = q.front();
q.pop();
vis[now] = ;
; i < edge[now].size(); ++i) {
if (dis[now] + edge[now][i].cost > dis[edge[now][i].to])
continue;
dis[edge[now][i].to] = dis[now] + edge[now][i].cost; //更新
if (!vis[edge[now][i].to]) { //入队
q.push (edge[now][i].to);
vis[edge[now][i].to] = ;
}
}
}
}
int main() {
while (cin >> n >> m && (n || m)) {
while (!q.empty())
q.pop();
; i <= n; i++)
dis[i] = INF;
; i <= n; i++)
edge[i].clear();
; i <= m; i++) {
cin >> a >> b >> c;
edge[a].push_back (node (b, c)), edge[b].push_back (node (a, c));
}
spfa ();
cout << dis[n] << endl;
}
;
}
hdu 2544 SPFA
单源最短路模板 + hdu - 2544的更多相关文章
- 单源最短路模板(dijkstra)
单源最短路(dijkstra算法及堆优化) 弱化版题目链接 n^2 dijkstra模板 #include<iostream> #include<cstdio> #includ ...
- 单源最短路模板_SPFA_Dijkstra(堆优化)_C++
随手一打就是标准的SPFA,默认1号节点为出发点,当然不用 f 判断是否在队里也可以,只是这样更优化一点 void spfa() { int i,x,k; ;i<=n;i++) { d[i]=o ...
- 【单源最短路模板】 poj 2387
#include <cstdio> #include <iostream> #include <stdlib.h> #include <memory.h> ...
- 最短路模板(Dijkstra & Dijkstra算法+堆优化 & bellman_ford & 单源最短路SPFA)
关于几个的区别和联系:http://www.cnblogs.com/zswbky/p/5432353.html d.每组的第一行是三个整数T,S和D,表示有T条路,和草儿家相邻的城市的有S个(草儿家到 ...
- [ACM_图论] Domino Effect (POJ1135 Dijkstra算法 SSSP 单源最短路算法 中等 模板)
Description Did you know that you can use domino bones for other things besides playing Dominoes? Ta ...
- 模板C++ 03图论算法 1最短路之单源最短路(SPFA)
3.1最短路之单源最短路(SPFA) 松弛:常听人说松弛,一直不懂,后来明白其实就是更新某点到源点最短距离. 邻接表:表示与一个点联通的所有路. 如果从一个点沿着某条路径出发,又回到了自己,而且所经过 ...
- 单源最短路_SPFA_C++
当我们需要求一个点到其它所有点的最短路时,我们可以采用SPFA算法 代码特别好写,而且可以有环,但是不能有负权环,时间复杂度是O(α(n)n),n为边数,α(n)为n的反阿克曼函数,一般小于等于4 模 ...
- 2018/1/28 每日一学 单源最短路的SPFA算法以及其他三大最短路算法比较总结
刚刚AC的pj普及组第四题就是一种单源最短路. 我们知道当一个图存在负权边时像Dijkstra等算法便无法实现: 而Bellman-Ford算法的复杂度又过高O(V*E),SPFA算法便派上用场了. ...
- 用scheme语言实现SPFA算法(单源最短路)
最近自己陷入了很长时间的学习和思考之中,突然发现好久没有更新博文了,于是便想更新一篇. 这篇文章是我之前程序设计语言课作业中一段代码,用scheme语言实现单源最段路算法.当时的我,花了一整天时间,学 ...
随机推荐
- stickey-footer实现footer固定页面底部
先看看实现效果:http://getbootstrap.com/2.3.2/examples/sticky-footer.html 当一个网页比较简单,内容比较少使得网页不足浏览器高的时候,为了显示更 ...
- MySQL的Auto-Failover功能
今天来体验一下MySQL的Auto-Failover功能,这里用到一个工具MySQL Utilities,它的功能很强大.此工具提供如下功能:(1)管理工具 (克隆.复制.比较.差异.导出.导入)(2 ...
- centos7 部署 docker、shipyard
=============================================== 2019/4/9_第3次修改 ccb_warlock 更新说 ...
- python生成器、装饰器、正则
包子来了[4],被[mayun]吃了! 包子来了[4],被[mahuateng]吃了! 做了两个包子 包子来了[5],被[mayun]吃了! 包子来了[5],被[mahuateng]吃了! 做了两个包 ...
- .NetCore中如何实现权限控制 基于Claim角色、策略、基于Claim功能点处理
.NetCore中如果实现权限控制的问题,当我们访问到一个Action操作的时候,我们需要进行权限控制 基于claims 角色控制 基于角色控制总觉得范围有点过大,而且控制起来感觉也不是太好,举一个例 ...
- 恢复spark挂掉的节点
背景: 某个Worker节点挂掉了,我们需要将Worker进行启动恢复,同时可以恢复streaming中的executor 解决办法: 其实很简单,去worker节点中执行sbin/start-sla ...
- 【Java】 大话数据结构(11) 查找算法(2)(二叉排序树/二叉搜索树)
本文根据<大话数据结构>一书,实现了Java版的二叉排序树/二叉搜索树. 二叉排序树介绍 在上篇博客中,顺序表的插入和删除效率还可以,但查找效率很低:而有序线性表中,可以使用折半.插值.斐 ...
- priority_queue<int>q;
priority_queue<int>q;//默认不递增q.size();//q中有几个元素q.pop();//删除队首q.top();//返回队首元素q.push();//在队列中插入一 ...
- 如何利用JMeter模拟超过 5 万的并发用户
本文将从负载测试的角度,描述了做一次流畅的5万用户并发测试需要做的事情. 你可以在本文的结尾部分看到讨论的记录. 快速的步骤概要 编写你的脚本 使用JMeter进行本地测试 BlazeMeter沙箱测 ...
- 使用 Maven 来管理项目 & 从 0 开始搭建 Maven 项目
maven 是 apache 的一个开源软件,纯 Java 编写的,专门用于管理 Java 项目的一个工具. maven 就是一个工具而已,用不用都不耽误你刷刷的敲代码,那为什么我们还要学习它呢? 那 ...