
最短路 模版
发布日期:2021-05-07 07:57:34
浏览次数:16
分类:原创文章
本文共 3944 字,大约阅读时间需要 13 分钟。
编号从1开始
dijkstra(正权)
#include<iostream>#include<algorithm>#include<cstdio>#include<cstring>#include<bitset>#include<cassert>#include<cctype>#include<cmath>#include<cstdlib>#include<ctime>#include<deque>#include<iomanip>#include<list>#include<map>#include<queue>#include<set>#include<stack>#include<vector>#include<unordered_set>#include<unordered_map>using namespace std;//extern "C"{void *__dso_handle=0;}typedef long long ll;typedef long double ld;#define fi first#define se second#define pb push_back#define mp make_pair#define pii pair<int,int>#define lowbit(x) x&-xconst double PI=acos(-1.0);const double eps=1e-6;const ll mod=1e9+7;const int inf=0x3f3f3f;const int maxn=1e5+10;const int maxm=100+10;#define ios ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);struct Edge{ int from,to,dist; Edge(int u,int v,int d):from(u),to(v),dist(d){ }};int n,m;vector<Edge> edges;vector<int> G[maxn];bool vis[maxn];int d[maxn];int f[maxn];void init(int n){ for(int i=0;i<=n;i++) G[i].clear(); edges.clear();}void addEdge(int u,int v,int d){ edges.push_back(Edge(u,v,d)); G[u].push_back(edges.size()-1);}void dijkstra(int s){ priority_queue<pii,vector<pii>,greater<pii> > que; while(!que.empty()) que.pop(); for(int i=1;i<=n;i++) d[i]=inf; d[s]=0; memset(vis,0,sizeof(vis)); que.push(mp(0,s)); while(!que.empty()) { pii tmp=que.top(); que.pop(); int u=tmp.second; if(vis[u]) continue; vis[u]=true; for(int i=0;i<G[u].size();i++) { Edge e=edges[G[u][i]]; if(d[e.to]>d[u]+e.dist) { d[e.to]=d[u]+e.dist; f[e.to]=G[u][i]; que.push(mp(d[e.to],e.to)); } } }}int main(){ init(n); scanf("%d%d",&n,&m); for(int i=0;i<m;i++){ int u,v,d; scanf("%d%d%d",&u,&v,&d); addEdge(u,v,d); } for(int j=1;j<=n;j++) { dijkstra(j); for(int i=1;i<=n;i++) cout << d[i] << ' '; cout << endl; }}//4 8//1 2 2//1 3 6//1 4 4//2 3 3//3 1 7//3 4 1//4 1 5//4 3 12//0 2 5 4 //9 0 3 4 //6 8 0 1 //5 7 10 0
SPFA(负权)
#include<iostream>#include<algorithm>#include<cstdio>#include<cstring>#include<bitset>#include<cassert>#include<cctype>#include<cmath>#include<cstdlib>#include<ctime>#include<deque>#include<iomanip>#include<list>#include<map>#include<queue>#include<set>#include<stack>#include<vector>#include<unordered_set>#include<unordered_map>using namespace std;//extern "C"{void *__dso_handle=0;}typedef long long ll;typedef long double ld;#define fi first#define se second#define pb push_back#define mp make_pair#define pii pair<int,int>#define lowbit(x) x&-xconst double PI=acos(-1.0);const double eps=1e-6;const ll mod=1e9+7;const int inf=0x3f3f3f3f;const int maxn=2e5+10;const int maxm=100+10;#define ios ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);struct Edge{ int from,to,dist; Edge(int u,int v,int d):from(u),to(v),dist(d){ }};int n,m;vector<Edge> edges;vector<int> G[maxn];bool inq[maxn];int d[maxn],cnt[maxn],f[maxn];void init(){ for(int i=0;i<=n;i++) G[i].clear(); edges.clear();}void addEdge(int u,int v,int d){ edges.push_back(Edge(u,v,d)); G[u].push_back(edges.size()-1);}bool spfa(int s){ memset(inq, 0, sizeof(inq)); memset(cnt, 0, sizeof(cnt)); for(int i=0;i<=n;i++) d[i]=inf; queue<int> que; while(!que.empty()) que.pop(); d[s]=0; inq[s]=true; que.push(s); while(!que.empty()) { int u=que.front();que.pop(); inq[u]=false; for(int i=0;i<G[u].size();i++) { Edge e=edges[G[u][i]]; if(d[u]<inf && d[e.to]>d[u]+e.dist) { d[e.to]=d[u]+e.dist; f[e.to]=G[u][i]; if(!inq[e.to]) { que.push(e.to); inq[e.to]=true; if(++cnt[e.to]>=n) return false; } } } } return true;}int main(){ init(); scanf("%d%d",&n,&m); for(int i=0;i<m;i++){ int u,v,d; scanf("%d%d%d",&u,&v,&d); addEdge(u,v,d); } for(int j=1;j<=n;j++) { if(!spfa(j)) { cout << "FUCK!!" << endl; continue; } for(int i=1;i<=n;i++) printf("%d ",d[i]); printf("\n"); }}//4 8//1 2 2//1 3 6//1 4 4//2 3 3//3 1 7//3 4 1//4 1 5//4 3 12//0 2 5 4//9 0 3 4 //6 8 0 1 //5 7 10 0
发表评论
最新留言
表示我来过!
[***.240.166.169]2025年04月06日 22时44分10秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
数据仓库系列之维度建模
2021-05-09
Scala教程之:函数式的Scala
2021-05-09
java中DelayQueue的使用
2021-05-09
java程序员从小工到专家成神之路(2020版)-持续更新中,附详细文章教程
2021-05-09
线程stop和Interrupt
2021-05-09
Android中定时执行任务的3种实现方法
2021-05-09
nodejs中npm常用命令
2021-05-09
基于Vue2.0+Vue-router构建一个简单的单页应用
2021-05-09
基于vue2.0实现仿百度前端分页效果(二)
2021-05-09
JS魔法堂:函数重载 之 获取变量的数据类型
2021-05-09
时间序列神器之争:Prophet VS LSTM
2021-05-09
SpringBoot中关于Mybatis使用的三个问题
2021-05-09
MapReduce实验
2021-05-09
Leaflet 带箭头轨迹以及沿轨迹带方向的动态marker
2021-05-09
java大数据最全课程学习笔记(1)--Hadoop简介和安装及伪分布式
2021-05-09
java大数据最全课程学习笔记(2)--Hadoop完全分布式运行模式
2021-05-09
还在使用集合类完成这些功能?不妨来看看 Guava 集合类!!!
2021-05-09
大部分程序员还不知道的 Servelt3 异步请求,原来这么简单?
2021-05-09
[apue] popen/pclose 疑点解惑
2021-05-09