最短路大全
来源:互联网 发布:殷嘉恩 let it go 编辑:程序博客网 时间:2024/06/09 12:52
前言
最短路是算法中比较常用的,它的思想也贯穿着整个竞赛的。
这里蒟蒻我就总结一下。
Floyd
code:
struct Floyd{//O(n^3) int dis[M][M]; void solve(){ //这里dis在读入前初始为INF,一边读一边存边 REP(k,1,n) REP(i,1,n) REP(j,1,n) dis[i][j]=min(dis[i][j],dis[i][k]+dis[k][j]); } }Floyd;
Bellman
code :
struct Bellman{//O(n*m) struct edge{ int from,to,cost; }es[M<<1]; int dis[M]; void solve(int s){ mcl(dis,63); dis[s]=0; while(1){ bool f=1; REP(i,1,m){//存边 if(dis[es[i].from]!=INF && dis[es[i].to]>dis[es[i].from]+es[i].cost){ dis[es[i].to]=dis[es[i].from]+es[i].cost; f=0; } } if(f)break; } } }Bellman;
Dijkstra
code :
struct Dijkstra{//O(n log m) 单点 bool vis[M]; int dis[M]; struct node{ int to,cost; bool operator<(const node &_)const{ return cost>_.cost; } }; vector<node>E[M]; priority_queue<node>Q; void solve(int s){ mcl(dis,63); mcl(vis,0); dis[s]=0; Q.push((node){s,0}); while(!Q.empty()){ node now=Q.top();Q.pop(); int x=now.to; if(vis[x])continue; vis[x]=1; REP(i,0,E[x].size()-1){ node y=E[x][i]; if(dis[y.to]>now.cost+y.cost){ dis[y.to]=now.cost+y.cost; Q.push((node){y.to,dis[y.to]}); } } } } }Dijkstra;
SPFA
code :
struct SPFA{ struct node{ int to,cost; }; vector<node>E[M]; queue<int>Q; int dis[M]; bool vis[M]; void solve(int s){ mcl(dis,INF); mcl(vis,0); Q.push(s); dis[s]=0; vis[s]=1; while(!Q.empty()){ int x=Q.front();Q.pop(); REP(i,0,E[x].size()-1){ node y=E[x][i]; if(dis[y.to]>dis[x]+y.cost){ dis[y.to]=dis[x]+y.cost; if(!vis[y.to]){ vis[y.to]=1; Q.push(y.to); } } } } } }SPFA;
小结:最短路在树上的题目是可以做为暴力分的,而且还是比较从简的。
阅读全文
0 0
- 最短路大全
- 最短路大全
- 最短路 & 次短路
- 最短路
- 最短路
- 最短路
- 最短路
- 最短路
- 最短路
- 最短路
- 最短路
- 最短路
- 最短路
- 最短路
- 最短路
- 最短路
- 最短路
- 最短路
- A. Vicious Keyboard
- 第五周项目二C/C++数据结构之自建算法库——链栈
- 线程 多线程
- 百度地图api实现路线规划之步行驾车
- Java 520.1314表白
- 最短路大全
- React学习笔记_React-Redux 的用法
- 20171107_VMware12_ubuntu16.04.3LTS_英文版安装中文输入法ibus
- 【Mybatis学习】Mybatis映射器
- 查找不重复的统计数据的sql语句的写法
- PAT (Basic Level) Practise (中文)1029. 旧键盘(20)
- 解决idea2017创建maven项目最后编译报错找不到StringUtils类
- 最小生成树
- Latex论文中用到的花体字