【模板】【图论】最短路
来源:互联网 发布:淘宝网御龙在天激活码 编辑:程序博客网 时间:2024/06/06 07:50
最近打算整理一下noip范围内的各种板子,就从最短路开始吧。
因为是给自己看的所以没加注释233
Dijkstra:
#include <algorithm>#include <cstdio>#include <queue>using namespace std;const int mxn =10003,mxm =500003,inf=0x7fffffff;struct Edge{ int nx,to,val;}e[mxm];struct Node{ int d,u; bool operator < (const Node &x) const{ return x.d<d; }};int hd[mxn];int vis[mxn];int dis[mxn];int n,m,s,ecnt;inline void add_edge(int u,int v,int w){ e[++ecnt].nx=hd[u]; hd[u]=ecnt; e[ecnt].to=v; e[ecnt].val=w;}void Dijkstra(int s){ priority_queue<Node>q; for(int i=1;i<=n;i++) dis[i]=inf; dis[s]=0; q.push((Node){0,s}); while(!q.empty()) { Node x=q.top();q.pop(); int u=x.u; if(vis[u]) continue; vis[u]=true; for(int i=hd[u];i;i=e[i].nx) { int v=e[i].to; if(dis[v]>dis[u]+e[i].val) { dis[v]=dis[u]+e[i].val; q.push((Node){dis[v],v}); } } }}int main(){ scanf("%d%d%d",&n,&m,&s); for(int i=1;i<=m;i++) { int u,v,w; scanf("%d%d%d",&u,&v,&w); add_edge(u,v,w); } Dijkstra(s); for(int i=1;i<=n;i++) printf("%d ",dis[i]); printf("\n"); return 0;}
SPFA:
#include <algorithm>#include <cstdio>#include <queue>using namespace std;const int mxn =10003,mxm =500003,inf=0x7fffffff;struct Edge{ int nx,to,val;}e[mxm];int hd[mxn];int inq[mxn];int dis[mxn];int n,m,s,ecnt;inline void add_edge(int u,int v,int w){ e[++ecnt].nx=hd[u]; hd[u]=ecnt; e[ecnt].to=v; e[ecnt].val=w;}void spfa(int s){ queue<int>q; for(int i=1;i<=n;i++) dis[i]=inf; dis[s]=0; q.push(s); inq[s]=true; while(!q.empty()) { int u=q.front();q.pop(); inq[u]=false; for(int i=hd[u];i;i=e[i].nx) { int v=e[i].to; if(dis[v]>dis[u]+e[i].val) { dis[v]=dis[u]+e[i].val; if(!inq[v]) { q.push(v); inq[v]=true; } } } }}int main(){ scanf("%d%d%d",&n,&m,&s); for(int i=1;i<=m;i++) { int u,v,w; scanf("%d%d%d",&u,&v,&w); add_edge(u,v,w); } spfa(s); for(int i=1;i<=n;i++) printf("%d ",dis[i]); printf("\n"); return 0;}
Floyed:
#include <cstdio>#include <algorithm>using namespace std;const int mxn =103,inf=0x7fffffff;int g[mxn][mxn];int n,m,s;int main(){ scanf("%d%d%d",&n,&m,&s); for(int i=1;i<=n;i++) for(int j=1;j<=n;j++) g[i][j]=inf; for(int i=1;i<=m;i++) { int u,v,w; scanf("%d%d%d",&u,&v,&w); g[u][v]=min(g[u][v],w); } for(int k=1;k<=n;k++) for(int i=1;i<=n;i++) for(int j=1;j<=n;j++) if(g[i][k]!=inf&&g[k][j]!=inf) g[i][j]=min(g[i][j],g[i][k]+g[k][j]); for(int i=1;i<=n;i++) g[i][i]=0; for(int i=1;i<=n;i++) printf("%d ",g[s][i]); printf("\n"); return 0;}
后记:这样的博客还真是简单粗暴又好写- -
阅读全文
1 0
- 【模板】【图论】最短路
- 模板整理: 图论---最短路
- 最短路模板
- 最短路模板
- poj1125最短路模板
- 最短路 SPFA模板
- 最短路 kruskal模板
- 最短路 dijkstra模板
- 最短路模板
- 最短路模板总结
- 最短路模板
- Dijkstra 模板 最短路
- 最短路模板
- 【最短路算法模板】
- 最短路模板
- 最短路 模板
- 最短路模板
- 最短路 【spfa】 模板
- 抽象类和接口联系与区别
- 配置es6编辑环境遇到的问题。
- 多线程经典问题:馒头问题 生产和消费问题(线程的通信问题)
- C语言入门:字符串排序
- java网络编程学习详解和总结!
- 【模板】【图论】最短路
- cmd下用bat文件执行adb 脚本命令
- jbpm通过spring整合到项目里
- JZOJ1262. 为奶牛熄灯
- Oracle基于数据泵导入dmp文件的小记
- 树状数组详解
- 数据结构的简单理解(3)
- docker registry私有仓库的一些错误解决办法
- squid之refresh_pattern详解