C--最短路 ----邻接表存储及SPFA算法
来源:互联网 发布:页游广告知乎 编辑:程序博客网 时间:2024/05/29 12:58
C--最短路
Time Limit: 7000MS Memory Limit: 65536KB
Problem Description
给出一个带权无向图,包含n个点,m条边。求出s,e的最短路。保证最短路存在。
Input
多组输入。
对于每组数据。
第一行输入n,m(1<= n && n<=5*10^5,1 <= m && m <= 2*10^6)。
接下来m行,每行三个整数,u,v,w,表示u,v之间有一条权值为w(w >= 0)的边。
最后输入s,e。
Output
对于每组数据输出一个整数代表答案。
Example Input
3 1
1 2 3
1 2
Example Output
3
Time Limit: 7000MS Memory Limit: 65536KB
Problem Description
给出一个带权无向图,包含n个点,m条边。求出s,e的最短路。保证最短路存在。
Input
多组输入。
对于每组数据。
第一行输入n,m(1<= n && n<=5*10^5,1 <= m && m <= 2*10^6)。
接下来m行,每行三个整数,u,v,w,表示u,v之间有一条权值为w(w >= 0)的边。
最后输入s,e。
Output
对于每组数据输出一个整数代表答案。
Example Input
3 1
1 2 3
1 2
Example Output
3
思路:
由于节点的数据范围过大,因此无法利用二维数组存储路径,此时需要使用连接表存储路径。
SPFA算法:
1.可以解决有负权值的情况。
2.利用队列进行松弛操作。
#include <iostream>#include <cstdio>#include <cstring>#include <algorithm>#include <cmath>#include <queue>#include <vector>#define inf 0x3f3f3f3fusing namespace std;struct node{ int id; int wi;} a,b;vector<node>v[500100];int vis[500100],dist[500100], n, m;void SPFA(int s, int e){ memset(dist,inf,sizeof(dist)); memset(vis,0,sizeof(vis)); dist[s]=0; vis[s]=1; queue<int>q; q.push(s); while(!q.empty()) { int x=q.front(); q.pop(); vis[x]=0; //大坑点,因为这一句,卡一道题卡了好久好久!!!! for(int i=0; i<v[x].size(); i++) { int id=v[x][i].id; int wi=v[x][i].wi; if(dist[id] >dist[x]+wi) // 不断进行实时更新保证每一步的 dist 都是最短情况 { dist[id]=dist[x]+wi; if(!vis[id]) { q.push(id); vis[id]=1; } } } } cout<<dist[e]<<endl;}int main (){ int u,V,w; while(~scanf("%d %d",&n,&m)) { for(int i=0; i<m; i++) { scanf("%d %d %d",&u,&V,&w); a.id=V; a.wi=w; v[u].push_back(a); b.id=u; b.wi=w; v[V].push_back(b); } int s,e; cin >>s>>e; SPFA(s,e); }}
阅读全文
0 0
- C--最短路 ----邻接表存储及SPFA算法
- 最短路SPFA算法 (通过邻接表来实现)
- HDU 2544 最短路(spfa邻接表)
- C--最短路 (spfa算法)
- HDOJ 2544 最短路(最短路径 dijkstra算法,SPFA邻接表实现,floyd算法)
- 邻接表(spfa算法---单源最短路)
- poj Wormholes (最短路 spfa Bellman-Ford 算法 邻接表实现)
- NYOJ 1274 信道安全 裸的最短路 spfa 邻接表 第九届省赛C
- 邻接表存储图的SPFA算法~
- poj1511 spfa最短路+手写邻接表+反向建图
- 旧代码 - 最短路 Spfa(邻接表)
- HDU2544_最短路(Dijkstra)(Bellman-Ford)(SPFA+邻接表/邻接矩阵)
- 最短路模板——dijkstra,SPFA(邻接表实现)
- HDU 2544 最短路 SPFA 邻接表 模板
- hdoj 2544 最短路 【dijkstra + floyd + spfa邻接表实现】
- hdu 1874 畅通工程续(最短路spfa邻接表)
- PowerOj 2478 最短路问题 邻接表spfa
- POJ 1511(邻接表和最短路 SPFA)
- LoadingBar
- spark-beeline连接hvie
- 设计模式-享元模式
- nginx信号量控制命令
- 【codeforces】A. The Text Splitting(思维题-水题)
- C--最短路 ----邻接表存储及SPFA算法
- RichText
- 交换机数据转发原理
- LDO线性稳压器和DCDC的区别(低功耗锂电池供电感想)
- TextField
- Spring如何设置让事务自动提交和回滚?Spring两种事务管理方式的配置及使用
- CocosStudio
- 删掉进程
- 1 设计模式-服务定位设计模式实例