Dijkstra模板
来源:互联网 发布:知乎 俄罗斯 计算机 编辑:程序博客网 时间:2024/05/21 21:33
#include <cstdio>#include <queue>#include <algorithm>int n,m,begin,end;struct edge{ int u,v,w,next;} e[6200 * 2 + 1];int a[2500 + 1],num;inline void addedge(int u,int v,int w){ num++; e[num].u = u; e[num].v = v; e[num].w = w; e[num].next = a[u]; a[u] = num;}int dis[2500 + 1],vis[2500 + 1];struct st{ int n,w; bool operator <(const st &a) const{ return a.w < w; }};std::priority_queue<st> q;inline void dijkstra(){ for(int i = 1;i <= n;i++) dis[i] = 0x7fffffff; dis[begin] = 0; q.push((st){begin,0}); while(!q.empty()){ int x = q.top().n; q.pop(); if (vis[x])continue; vis[x] = 1; for(int i = a[x];i;i = e[i].next){//这行中间一定要写i,这是终止循环的条件,当i=0时没有邻接边,停止循环 int y = e[i].v; if (dis[x] + e[i].w < dis[y]){ dis[y] = dis[x] + e[i].w; q.push((st){y,dis[y]}); } } }}int main(){ scanf("%d %d %d %d",&n,&m,&begin,&end); for(int i = 1;i <= m;i++){ int u,v,w; scanf("%d %d %d",&u,&v,&w); addedge(u,v,w); addedge(v,u,w); } dijkstra(); printf("%d",dis[end]);}
阅读全文
0 0
- dijkstra 模板
- dijkstra 模板
- Dijkstra模板
- dijkstra模板
- dijkstra模板
- Dijkstra模板
- (Dijkstra模板)
- Dijkstra模板
- Dijkstra模板
- Dijkstra 模板
- Dijkstra模板
- dijkstra 模板
- dijkstra模板
- dijkstra模板
- dijkstra模板
- [模板]Dijkstra
- dijkstra 模板
- 模板 Dijkstra
- 阿里云重新后,SVN,TOMCAT,MQTT要手动启动一次
- Jedis连接Redis异常的问题
- 形参和实参的区别
- idea激活服务器地址
- mySql中的删除(delete,truncate,drop)的区别
- Dijkstra模板
- 2017.9.23 循环格 思考记录
- Linux虚拟机怎么用root身份登录
- matlab-figure图形-相关设置(xlabel+ylabel+特殊点标记 +填充)
- MyEclipse快捷键
- 他们为什么选择前端工程化,而我又是基于什么考虑的
- LinuxStudyNote(18)-Linux常用命令(2)-文件处理命令(13)-文件显示(4)-less分页显示文件内容往前翻页以及内容查找
- 扰心的总结
- 杨辉三角问题 Java和Python实现