单源最短路模板 + 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语言实现单源最段路算法.当时的我,花了一整天时间,学 ...
随机推荐
- 翻译:探索GLSL-用几何着色器(着色器库)实现法线可视化
翻译:探索GLSL-用几何着色器(着色器库)实现法线可视化 翻译自: Exploring GLSL – Normal Visualizer with Geometry Shaders (Shader ...
- 蓝桥杯 算法训练 单词接龙 _DFS_搜索 字符串比较
单词接龙 问题描述 单词接龙是一个与我们经常玩的成语接龙相类似的游戏,现在我们已知一组单词,且给定一个开头的字母,要求出以这个字母开头的最长的“龙”(每个单词都最多在“龙”中出现两次),在两个单词相 ...
- Brief History of Machine Learning
Brief History of Machine Learning My subjective ML timeline Since the initial standpoint of science, ...
- (32位)本体学习程序(ontoEnrich)系统使用说明文档
系统运行:文件夹system下,可执行文件ontoEnrichment --------------------------------------------------------1.简单概念学习 ...
- 20155227 2016-2017-2 《Java程序设计》第五周学习总结
20155227 2016-2017-2 <Java程序设计>第五周学习总结 教材学习内容总结 语法与继承架构 使用try...catch JVM会尝试执行try区块中的程序代码,如果发生 ...
- Android改进版CoverFlow效果控件
最近研究了一下如何在Android上实现CoverFlow效果的控件,其实早在2010年,就有Neil Davies开发并开源出了这个控件,Neil大神的这篇博客地址http://www.inter- ...
- SSH 公钥登录
一般使用SSH进行远程登录时需要提供密码,这也是我们所熟知的一种方式. 另外,就是通过公钥登录的方式,本文将简要介绍公钥登录的两种方法,建议使用方法二.本文也将简单演示公钥登录过程,以及强制使用公钥和 ...
- TC-572-D1L2 (双向搜索+记忆化)
solution: 这一题是比较难实现的双向搜索题:(字符串+双向搜索+hash记忆化) 我们可以先把K的前半部分枚举出来,并将得出的所有结果和题目给的n个数的每一个数的前半部分都比对一遍,得到它和每 ...
- FPGA学习笔记. DDS
DDS原理 直接数字式频率合成器(Direct Digital Synthesizer) 频率计算公式 Fout = FW * Fclk / 2^N Fout 输出频率, Fw 频率控制字, N 位数 ...
- Eric6启动时“无法定位序数4540于动态链接库LIBEAY32.dll”的错误
参考自:https://blog.csdn.net/HongAndYi/article/details/80721478 在安装PyQt5的编程环境时,安装Eric6-17.12后运行eric6,却出 ...