C--最短路 (spfa算法)
来源:互联网 发布:37传奇霸业 血符数据 编辑:程序博客网 时间:2024/05/29 18:20
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
spfa算法详解(http://blog.csdn.net/muxidreamtohit/article/details/7894298)
#include<bits/stdc++.h>#define Maxn 0x3f3f3f3fusing namespace std;int n, m, cnt;int vis[500010], dis[500010],head[500010];struct node{ int v, w; int next;}edge[4000010];void add(int u, int v, int w){ edge[cnt].v = v; edge[cnt].w = w; edge[cnt].next = head[u]; head[u] = cnt++;}void spfa(int s, int e){ queue<int>q; memset(vis,0,sizeof(vis)); for(int i = 1; i <= n; i++) dis[i] = Maxn; dis[s] = 0; vis[s] = 1; q.push(s); while(!q.empty()) { int k = q.front(); q.pop(); vis[k] = 0; for(int i = head[k]; i != -1; i = edge[i].next) { int v = edge[i].v; if(dis[v] > dis[k] + edge[i].w) { dis[v] = dis[k] + edge[i].w; if(!vis[v]) { vis[v] = 1; q.push(v); } } } }}int main(){ while(cin >> n >> m) { memset(head,-1,sizeof(head)); cnt = 0; while(m--) { int u, v, w; cin >> u >> v >> w; add(u,v,w); add(v,u,w); } int s, e; cin >> s >> e; spfa(s,e); cout << dis[e] << endl; } return 0;}
阅读全文
0 0
- C--最短路 (spfa算法)
- 最短路--SPFA算法
- 最短路SPFA算法
- 最短路: SPFA算法
- spfa算法 最短路
- SPFA最短路算法
- hdu2544 最短路(SPFA算法)
- 最短路算法(SPFA)
- SPFA算法之最短路。
- 关于最短路算法SPFA
- 最短路(SPFA)算法
- 最短路SPFA 算法详解
- SPFA算法 (最短路)
- 最短路【SPFA】算法模板
- SPFA最短路算法解析
- 最短路之SPFA算法
- 最短路SPFA算法模板
- 浅谈最短路-SPFA算法
- ES搜索参考网站
- 图标字体的制作
- C#加载shellcode
- Fastjson解析多级泛型的几种方式—新增使用class文件来解析多级泛型
- 高德地图开发之点标注marker
- C--最短路 (spfa算法)
- Irrlicht 源码学习笔记 【CFileList.h/cpp】【CReadFile.h/cpp】【CMemoryReadFile.h/cpp】
- vue路由带参跳转,刷新后参数不消失
- leetcode520. Detect Capital
- Qt在ListWidget中添加自定义ListItem对象
- 结构化查询语言
- git github gitlab的区别
- Typora的使用
- 约瑟夫环问题