【2017.12.18】Dijkstra专题
先友情提示一下,作者很早就会这个算法了,只不过这么久以来没怎么写过博客。现在正在学习它的拓展,干脆就把这个算法相关的内容整个敲一遍吧!本章把迪杰斯特拉从基础到拓展全都说一遍咯。
下面是优先队列(堆)优化后的dij代码。
#include<queue>
#include<vector>
#define inf 0x3f3f3f
struct Edge{
int to,dis; //to表示目标点,dis表示边的权值
}; struct HeapNode{ //记录dij算法用到的优先队列中的节点
int d,u;
bool operator <(const HeapNode& rhs) const{
return d>rhs.d;
}
}; struct Dijkstra{
int n,m;
vector<Edge> edges; //边列表
vector<int> G[maxn]; //每个节点的出边的编号,也可以手写邻接表(没开O2的话建议手写)
int d[maxn],p[maxn]; //d[i]表示起点s到i的最短距离,p[i]表示从s到i最短路中的上一条边 void init(int n){
this->n = n;
for(int i=0;i<n;i++) G[i].clear(); // 清空邻接表
edges.clear(); //清空边表
} void Addedge(int from,int to,int dis){
edges.push(back(Edge){to,dist});
m=edges.size();
G[from].push_back(m-1);
} void dij(int s){ //求起点s到所有点的距离
priority_queue<Heapnode> q;
for(int i=0;i<n;i++) d[i]=inf;
d[s]=0;
q.push((HeapNode){0,s});
while(!q.empty()){
Heapnode x=q.top(); q.pop();
int u=x.u;
if(d[i]!=inf) continue; //已经被确定过距离的点不再重复确定
for(int i=0;i<G[u].size();i++){
Edge& e=edges[G[u][i]]; //引用符号(&)相当于在循环中用e代替了edges[G[u][i]],任何对e的调用和赋值都会转成edges[G[u][i]]
if(d[e.to]>d[u]+e.dis){ //新距离比历史距离更短,更新
d[e.to]d[u]+e.dis;
p[e.to]=G[u][i];
q.push((HeapNode){d[e.to],e.to});
}
}
}
}
};
【2017.12.18】Dijkstra专题的更多相关文章
- Sprint3(12.18)总结
Sprint3第三阶段 1.类名:软件工程-第三阶段 2.时间:至12.18 3.选题内容:web版-餐厅到店点餐系统 4.团队博客地址: http://www.cnblogs.com/queenju ...
- 九月 26, 2017 10:18:14 上午 com.sun.jersey.server.impl.application.RootResourceUriRules <init> 严重: The ResourceConfig instance does not contain any root resource classes.
Tomcat启动错误:九月 26, 2017 10:18:14 上午 com.sun.jersey.server.impl.application.RootResourceUriRules <i ...
- Gitlab一键端的安装汉化及问题解决(2017/12/14目前版本为10.2.4)
Gitlab的安装汉化及问题解决 一.前言 Gitlab需要安装的包太TM多了,源码安装能愁死个人,一直出错,后来发现几行命令就装的真是遇到的新大陆一样... ... 装完之后感觉太简单,加了汉化补丁 ...
- 【2017.12.12】deepin安装U盘制作,支持 BIOS+UEFI,deepin_Recovery+Win PE
U盘要求为 FAT32,MBR分区表 如果需要放 4GB 大文件,可以分两个分区,第一分区FAT32格式,放启动相关文件,第二个分区用 NTFS 格式,放其它资料. 最新 Win10 支持显示 U盘 ...
- 2017.12.21-JQuery
作业:密码加强验证 <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> & ...
- 日本IT行业劳动力缺口达22万 在日中国留学生迎来就业好时机 2017/07/18 11:25:09
作者:倪亚敏 来源:日本新华侨报 发布时间:2017/07/18 11:25:09 据日本政府提供的数据,日本2018年应届毕业生的“求人倍率”已经达到了1.78倍.换言之,就是100名大学生 ...
- 2017.12.25 Mybatis物理分页插件PageHelper的使用(二)
参考来自: 官方文档的说明:https://github.com/pagehelper/Mybatis-PageHelper/blob/master/wikis/zh/HowToUse.md 上篇博客 ...
- [LOJ#6259]「CodePlus 2017 12 月赛」白金元首与独舞
[LOJ#6259]「CodePlus 2017 12 月赛」白金元首与独舞 试题描述 到河北省 见斯大林 / 在月光下 你的背影 / 让我们一起跳舞吧 うそだよ~ 河北省怎么可能有 Stalin. ...
- 2017.7.18 linux下ELK环境搭建
参考来自:Linux日志分析ELK环境搭建 另一篇博文:2017.7.18 windows下ELK环境搭建 0 版本说明 因为ELK从5.0开始只支持jdk 1.8,但是项目中使用的是JDK 1 ...
随机推荐
- JMeter3.2入门使用教程
JMeter3.2入门使用教程 背景说明 1.1. 背景简介 JMeter是Apache软件基金会下的一个开源项目,纯java开发的应用工具,可以作为进行负载和压力测试的工具来使用.从最开始时被设计成 ...
- 在eclipse中查看你用的tomcat的路径
在eclipse中查看你用的tomcat的路径 打开eclipse,选择window->Preferences->Server->Runtime Environments选择你的 ...
- block的优势
https://developer.apple.com/library/content/documentation/Cocoa/Conceptual/Blocks/Articles/bxOvervie ...
- Prim算法解决最小生成树
一.最小生成树问题 什么是最小生成树问题?给你一个带权连通图,需要你删去一些边,使它成为一颗权值最小的树. 二.Prim算法 1)输入:输入一个带权连通图,顶点集合V,边集合E 2)初始化:Vnew= ...
- Linux文件操作函数
creat() 函数 close() 函数 read() 函数 read 函数实际读到的字节数少于要求读的字节数时: 读普通文件,在读到要求字节数之前就到达文件尾: 当从终端设备读,通常一次最多读一行 ...
- 使用jQuery 发送Ajax
jQuery AJAX 方法 AJAX 是一种与服务器交换数据的技术,可以在不重新载入整个页面的情况下更新网页的一部分. 下面的表格列出了所有的 jQuery AJAX 方法: 构建页面:jqlogi ...
- Philipp Wagner
本文大部分来自OpenCV官网上的Face Reconition with OpenCV这节内容(http://docs.opencv.org/modules/contrib/doc/facerec/ ...
- KVM 重命名虚机
KVM 重命名虚机 1. 查看虚机列表 [root@bjape01-kvm1 ~]# virsh list --all Id 名称 状态 --- ...
- InnoDB体系架构总结(二)
事务 确保事务内的SQL都可以同步执行 要么一起成功 要么一起失败.事务有四个特性原子性 一致性,隔离性,持久性 实现方式 开始事务的时候回家记录记录一个LSN日志序列 当事务执行的时候 会首先在In ...
- PyCharm 社区版创建Django项目的一个方法
PyCharm 社区版创建项目无法选择Django等项目,只能选择Python项目. 你在进行练习的时候为了方便,可以用过期了的PyCharm专业版在可用的30分钟内创建社区版本不支持的项目,再用Py ...