做了一道跑大数据的最短路挂了,基于vector的二维模拟邻接表实现Dijkstra算法(*【模板】)
2015-01-22 20:44
531 查看
代码:
#include <stdio.h> #include <string.h> #include <string> #include <vector> #include <algorithm> #define INF 2100000000 using namespace std; int n; struct node { int dd; int w; }t; vector<node>q[500001]; unsigned int dis[500001]; bool vis[500001]; void Dijkstra(int s, int e) { int i, j; memset(vis, false, sizeof(vis)); for(i=0; i<=n; i++) { dis[i] = INF; } int len=q[s].size(); for(i=0; i<len; i++) { if(q[s][i].w < dis[q[s][i].dd] ) dis[q[s][i].dd]=q[s][i].w; //从起点开始的dis数组更新 } vis[s]=true; for(int k=0; k<n-1; k++) { int pos, mm=INF; for(i=1; i<=n; i++) { if( !vis[i] && dis[i]<mm ) {//当前节点未被访问过且权值较小 mm=dis[i]; pos=i; } } vis[pos]=true; //再次更新dis数组 len=q[pos].size(); for(j=0; j<len; j++) { if( !vis[q[pos][j].dd] && dis[ q[pos][j].dd ]>q[pos][j].w+dis[pos] ) dis[q[pos][j].dd ] = q[pos][j].w + dis[pos]; } } printf("%d\n", dis[e] ); } int main() { int m; int i; int u,v, w; int s, e; while(scanf("%d %d", &n, &m)!=EOF) { for(i=0; i<=n; i++) q[i].clear(); for(i=0; i<m; i++) { scanf("%d %d %d", &u, &v, &w); t.dd=v; t.w=w; q[u].push_back(t); t.dd=u; t.w=w; q[v].push_back(t); } scanf("%d %d", &s, &e); Dijkstra(s, e); } return 0; }
相关文章推荐
- Hihocoder 之 #1097 : 最小生成树一·Prim算法 (用vector二维 模拟邻接表,进行prim()生成树算法, *【模板】)
- 基于jQuery的AJAX和JSON实现纯html数据模板
- 基于jQuery的AJAX和JSON实现纯html数据模板
- HDOJ 2544 最短路(最短路径 dijkstra算法,SPFA邻接表实现,floyd算法)
- HDOJ 2544 最短路(最短路径 dijkstra算法,SPFA邻接表实现,floyd算法)
- poj 1847 最短路 dijkstra模板(vector邻接表+队列优化)
- 基于jQuery的AJAX和JSON实现纯html数据模板
- 最短路模板——dijkstra,SPFA(邻接表实现)
- SDUT OJ 图练习-BFS-从起点到目标点的最短步数 (vector二维数组模拟邻接表+bfs , *【模板】 )
- 基于邻接表的有回溯最小堆优化的单源最短路Dijkstra算法
- 用邻接表或vector实现存边以及具体如何调用[模板]
- 基于jQuery的AJAX和JSON实现纯html数据模板
- 基于jQuery的AJAX和JSON实现纯html数据模板
- 最短路模板:使用priority_queue实现的Dijkstra算法
- 基于jQuery的AJAX和JSON实现纯html数据模板
- JavaScript与JSON数据交互实现的基于HTML的模板
- 基于HTML5 Bootstrap搭建的后台模板,分页,模糊查询已经全部JS实现,无需编码,嵌入数据即可开发,内置8款皮肤,欧美风格,非常好用!
- 基于jQuery的AJAX和JSON实现纯html数据模板
- 九度 OJ 1447 题 最短路径问题 Dijkstra(迪杰斯特拉)算法实现,使用vector模板模拟邻接链表
- 类模板模拟实现STL中Vector