Dijkstra+SPFA 模板
Dijkstra
引用自:点击打开链接
#include <algorithm>
#include <cstdio>
#include <cstring>
#include <functional>
#include <iostream>
#include <queue>
#include <vector>
using namespace std;
const int maxn = + ;
typedef pair<int, int> pii;
struct Edge {
int to, weight;
Edge(int to, int weight) : to(to), weight(weight) {}
};
vector<vector<Edge>> G(MAXN); //更快
struct Dijkstra { //打包在Dijkstra中
int n, m;
int dist[MAXN];
int p[MAXN];
Dijkstra(int n) : n(n) {
for (int i = ; i <= n; i++) G[i].clear();
}
void AddEdge(int from, int to, int weight) {
G[from].push_back(Edge(to, weight)); //保存from出发的边
}
void dijkstra(int s) {
priority_queue<pii, vector<pii>, greater<pii>> Q;
memset(dist, 0x7f, sizeof(dist)); //初始化为无穷大 dist[s] = ;
Q.push(pii(, s)); // pii (dist ,u)
while (!Q.empty()) {
pii P = Q.top();
Q.pop();
int u = P.second, d = P.first;
Q.pop();
if (dist[u] < d) continue;
for (int i = ; i < G[u].size(); i++) {
Edge& e = G[u][i];
int v = e.to, w = e.weight;
if (dist[v] > dist[u] + w) {
dist[v] = dist[u] + w;
p[v] = u; //记录到各点的最短路径
Q.push(pii(dist[v], v));
}
}
}
}
};
int main() {
int n, m, u, v, w;
cin >> n >> m; // n 点 , m 边
Dijkstra d(n);
for (int i = ; i < m; i++) {
scanf("%d%d%d", &u, &v, &w);
d.AddEdge(u, v, w);
d.AddEdge(v, u, w);
}
d.dijkstra(); // 1点出发
cout << d.dist[n] << endl; //到n的最短路径 vector<int> ans; //到n点的最短路径
for (int i = n; i != ; i = d.p[i]) ans.push_back(i);
ans.push_back();
for (int i = ans.size() - ; i >= ; i--) cout << ans[i] << ' '; return ;
}
SPFA,向前星储存
struct Edge{
int from, to, w, next;
}e[];
int head[MAXN],vis[MAXN];
int dist[MAXN];
int n, m, tot; void add_edge(int i, int j, int w) {
e[tot].from = i, e[tot].to = j, e[tot].w = w;
e[tot].next = head[i]; head[i] = tot++;
} void SPFA(int s){
queue <int> q;
for (int i = ; i <= n; i++)
dist[i] = INF;
memset(vis, false, sizeof(vis));
q.push(s);
dist[s] = ;
while (!q.empty()){
int u = q.front();
q.pop();
vis[u] = false;
for (int i = head[u]; i != -; i = e[i].next){
int v = e[i].to;
if (dist[v] > dist[u] + e[i].w){
dist[v] = dist[u] + e[i].w;
if (!vis[v]){
vis[v] = true;
q.push(v);
}
}
}
}
}
Dijkstra+SPFA 模板的更多相关文章
- 最短路径---dijkstra算法模板
dijkstra算法模板 http://acm.hdu.edu.cn/showproblem.php?pid=1874 #include<stdio.h> #include<stri ...
- SPFA模板 Bellmanford优化版
SPFA模板: queue<int>Q; ]; ],sumv[]; *],__next[*],e,w[*],first[],cnts[]; void AddEdge(int U,int V ...
- floyed dij spfa 模板
/* SPFA模板 */ const int inf=0x3f3f3f3f; inline int SPFA(int s){ memset(dis,inf,sizeof(dis)); queue< ...
- 图的最短路径算法Dijkstra算法模板
Dijkstra算法:伪代码 //G为图,一般设为全局变量,数组d[u]为原点到达个点的额最短路径, s为起点 Dijkstra(G, d[u], s){ 初始化: for (循环n次){ u = 是 ...
- POJ2387 Til the Cows Come Home(SPFA + dijkstra + BallemFord 模板)
Til the Cows Come Home Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 37662 Accepted ...
- Dijkstra堆优化与SPFA模板
Dijkstra+优先队列 #include<cstdio> #include<cctype> #include<queue> #include<cstrin ...
- 几个小模板:topology, dijkstra, spfa, floyd, kruskal, prim
1.topology: #include <fstream> #include <iostream> #include <algorithm> #include & ...
- dijkstra spfa prim kruskal 总结
最短路和最小生成树应该是很早学的,大家一般都打得烂熟,总结一下几个问题 一 dijkstra O((V+E)lgV) //V节点数 E边数 dijkstra不能用来求最长路,因为此时局部最优解已经 ...
- hdu-2544-最短路(SPFA模板)
题目链接 题意很清晰,入门级题目,适合各种模板,可用dijkstra, floyd, Bellman-ford, spfa Dijkstra链接 Floyd链接 Bellman-Ford链接 SPFA ...
随机推荐
- ARTS Week 13
Jan 20, 2020 ~ Jan 26, 2020 Algorithm Problem 141 Linked List Cycle (环形链表) 题目链接 题目描述:给定一个链表,判断链表中是否存 ...
- Grafana & Graphite & Collectd:监控系统
简介 监控是运维工作中的一个重要组成部分,今天介绍一套新的监控工具,方便好用,扩展性强,这套工具有三个组件,Grafana & Graphite & Collectd: Grafana ...
- 命令拼接符 || && 区别
&& 前面的命令执行成功,执行拼接符后面的命令. || 前面的命令执行失败,执行拼接符后面的命令. 举例: (1)whoami && net user 真 ...
- Tomcat 配置2 tomcat-users.xml
Tomcat的配置 Tomcat的主要配置文件有3个,分别是: Tomcat-users.xml. web.xml server.xml. 配置Tomcat-users.xml 该文 ...
- Linux 下用 superpi 测试 CPU 性能
- monkey命令行测试
一. 什么是Monkey monkey是google提供的一个用于稳定性与压力测试的命令行工具.monkey程序由android系统自带,位于/sdcard/system/framework/monk ...
- package.json(node)中,多个命令行合并一条
1. ‘&’ 并行执行顺序,同时执行 "dev":"node test.js & webpack" 2.'&&'继发顺序,执行前 ...
- C#基础知识学习(2)string类中的方法
1.Compare 比较字符串 用来比较2个字符串的长度大小和值是否相同,相同则返回0,当x比y小返回-1,否则返回1,如果长度相同,且值不同,则返回1,代码如下 public static void ...
- java 企业站源码 兼容手机平板PC 自适应响应式 SSM主流框架 freemaker 静态引擎
前台: 支持四套模版, 可以在后台切换 系统介绍: 1.网站后台采用主流的 SSM 框架 jsp JSTL,网站后台采用freemaker静态化模版引擎生成html 2.因为是生成的html,所以 ...
- JS数据类型和堆栈+变量比较和值的复制+参数传递和类型检测
变量命名 变量名:字母 数字 下划线 美元符$ jquery: $ $.each() $ === jQuery underscore( js的一个函数库) : _ _.ea ...