数据结构 图 Dijkstra算法
来源:互联网 发布:作图软件cs 编辑:程序博客网 时间:2024/06/06 05:38
#include <cstdio>#include <queue>#include <vector>#include <iostream>#include <cstring>using namespace std;const int maxn = 1024;const int INF = 0x7fffffff;typedef pair<int, int> P; //到这个点的最短路长度 和这个点int ans;struct edge //边的终点 和长度{ int to, cost;};int V;vector<edge> G[maxn];int d[maxn]; //原点到某个点的最短路的长度int dijkstra(int s){ priority_queue<P, vector<P>, greater<P> > que; //用来动态的寻找每次权值最小的路和点 队列中元素从小到大排序 for(int i=0;i<maxn;i++) d[i]=INF; d[s] = 0; que.push(P(0, s)); while (!que.empty()) { P p = que.top(); //每次确定的标为*的点(不改变的点) que.pop(); int v = p.second; if(d[v] < p.first) continue; //到v点的距离如果已经被更新 这无须执行以下操作 for (int i = 0; i < G[v].size(); ++i) //找出与这个点相连的边 { edge e= G[v][i]; if (d[e.to] > d[v] +e.cost) { d[e.to] = d[v] + e.cost; if(e.cost > ans ) ans=e.cost; que.push(P(d[e.to], e.to)); //将更新后的点放进去 } } } cout<<ans<<endl; printf("%d\n",d[1]); return 0;}int main(){ int m; while(scanf("%d%d",&V,&m)!=EOF) { for (int i = 0; i < V; ++i) { int from, to, cost; scanf("%d%d%d", &from, &to, &cost); edge point; //利用队列把图连接起来 point.to=to; point.cost=cost; G[from].push_back(point); point.to=from; G[to].push_back(point); } ans=0; dijkstra(m); } return 0;}
阅读全文
1 0
- 数据结构 图 Dijkstra算法
- 【数据结构】有向图->dijkstra算法详解
- 数据结构之Dijkstra算法
- 数据结构 Dijkstra(迪杰斯特拉)算法
- 数据结构之Dijkstra算法
- 【数据结构与算法】 Dijkstra算法
- 【数据结构与算法】Dijkstra算法
- 数据结构----dijkstra算法,单源最短路径
- 数据结构:单源最短路径--Dijkstra算法
- [数据结构] 邻接矩阵实现Dijkstra算法
- [数据结构]Dijkstra算法求单源最短路径
- 《数据结构实战》------------------------------------实现Dijkstra算法
- 数据结构:单源最短路径--Dijkstra算法
- 数据结构——邻接矩阵表示的图的Dijkstra算法
- 2015年大二上-数据结构-图-2-(3)-Dijkstra算法
- 图算法-Dijkstra算法
- 图算法-Dijkstra算法
- 图算法:Dijkstra算法
- 数据结构 树 哈夫曼树及编码 C语言版
- 今日头条实习面试总结(1)
- 【Data_Structure笔记8】排序算法之【选择排序---堆排序】
- UE4学习笔记21th:创建菜单控件蓝图
- 关于VMware下安装VMware tools,安装文件没有出现问题的解决
- 数据结构 图 Dijkstra算法
- 备份/etc文件的周期性任务的详细介绍
- source insight使用教程
- HDU3938 Portal
- django自定义非主键自增字段类型(auto increment field)
- UPC 1053 Mysterious Treasure (记忆化搜索)
- i = i++; in JAVA
- FreeSWITCH加载非默认模块
- hdu1404 博弈