• Dijkstra单源最短路径算法

Dijkstra可以计算出发点到每个点的最短路,及单源最短路径(SSSP)。这一特点使得Dijkstra常常用来进行其他算法的预处理。用Dijkstra算法计算最短路的代码如下:

注:代码注释参见《算法竞赛入门经典——训练指南》(刘汝佳)

 struct Dijkstra{
int n, m;
vector<E> e;
vector<int> G[maxn];
bool done[maxn];
int d[maxn];
int p[maxn];
void init(int n){
this->n = n;
FOR(i, , n - ) G[i].clear();
e.clear();
}
void addE(int from, int to, int dist){
e.pb(E(from, to, dist));
m = e.size();
G[from].pb(m - );
}
void dijkstra(int s){
priority_queue<HeapNode> Q;
FOR(i, , n - ) d[i] = int_inf;
d[s] = ;
clr(done, );
Q.push(HeapNode(, s));
while(!Q.empty()){
HeapNode x = Q.top(); Q.pop();
int u = x.u;
if(done[u]) continue;
done[u] = ;
int sz = G[u].size();
FOR(i, , sz - ){
E &y = e[G[u][i]];
if(d[y.to] > d[u] + y.dist){
d[y.to] = d[u] + y.dist;
p[y.to] = G[u][i];
Q.push(HeapNode(d[y.to], y.to));
}
}
}
}
};
  • Bellman-Ford算法

Bellman-Ford算法的一个重要应用是判负圈。在迭代$n-1$次后如果还可以进行松弛(relax)操作,说明一定存在负圈。如果采用队列实现,那么当某个结点入队了$n$次时可以判断出存在负圈,代码如下:

 struct Bellman_Ford{
int n, m;
vector<E> e;
vector<int> G[maxn];
bool inq[maxn];
int d[maxn];
int p[maxn];
int cnt[maxn];
void init(int n){
this->n = n;
FOR(i, , n - ) G[i].clear();
e.clear();
}
void addE(int from, int to, int dist){
e.pb(E(from, to, dist));
m = e.size();
G[from].pb(m - );
}
bool negCyc(){
queue<int> Q;
clr(inq, ), clr(cnt, );
FOR(i, , n - ) d[i] = , inq[i] = , Q.push(i);
while(!Q.empty()){
int u = Q.front(); Q.pop();
inq[u] = ;
int sz = G[u].size();
FOR(i, , sz - ){
E &y = e[G[u][i]];
if(d[y.to] > d[u] + y.dist){
d[y].to = d[u] + y.dist;
p[e.to] = G[u][i];
if(!inq[y.to]){
Q.push(y.to);
inq[y.to] = ;
if(++cnt[y.to] > n) return ;
}
}
}
}
return ;
}
};

图论$\cdot$最短路问题的更多相关文章

  1. ACM/ICPC 之 DP解有规律的最短路问题(POJ3377)

    //POJ3377 //DP解法-解有规律的最短路问题 //Time:1157Ms Memory:12440K #include<iostream> #include<cstring ...

  2. HDU2066一个人的旅行/最短路问题

    一个人的旅行 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Subm ...

  3. 最短路问题之Dijkstra算法

    题目: 在上一篇博客的基础上,这是另一种方法求最短路径的问题. Dijkstra(迪杰斯特拉)算法:找到最短距离已经确定的点,从它出发更新相邻顶点的最短距离.此后不再关心前面已经确定的“最短距离已经确 ...

  4. 最短路问题之Bellman-ford算法

    题目: 最短路:给定两个顶点,在以这两个点为起点和终点的路径中,边的权值和最小的路径.考虑权值为点之间的距离. 单源最短路问题,Bellman-ford算法 思路:每次循环检查所有边,可优化. 应用于 ...

  5. dijkstra算法解决单源最短路问题

    简介 最近这段时间刚好做了最短路问题的算法报告,因此对dijkstra算法也有了更深的理解,下面和大家分享一下我的学习过程. 前言 呃呃呃,听起来也没那么难,其实,真的没那么难,只要弄清楚思路就很容易 ...

  6. [matlab] 22.matlab图论实例 最短路问题与最小生成树 (转载)

    最短路问题之 Floyd 某公司在六个城市 c1c1,c2c2,….,c6c6 中有分公司,从 cici 到 cjcj 的直接航程票价记在下述矩阵的 (ii,jj) 位置上. (∞∞表示无直接航路), ...

  7. 最短路问题(Bellman/Dijkstra/Floyd)

    最短路问题(Bellman/Dijkstra/Floyd) 寒假了,继续学习停滞了许久的算法.接着从图论开始看起,之前觉得超级难的最短路问题,经过两天的苦读,终于算是有所收获.把自己的理解记录下来,可 ...

  8. python数据结构之图论

    本篇学习笔记内容为图的各项性质.图的表示方法.图ADT的python实现 图(Graph) 是数据结构和算法学中最强大的框架之一(或许没有之一).图几乎可以用来表现所有类型的结构或系统,从交通网络到通 ...

  9. HDU 2680 Choose the best route 最短路问题

    题目描述:Kiki想去他的一个朋友家,他的朋友家包括所有的公交站点一共有n 个,一共有m条线路,线路都是单向的,然后Kiki可以在他附近的几个公交站乘车,求最短的路径长度是多少. 解题报告:这道题的特 ...

  10. HDU 2066 一个人的旅行 最短路问题

    题目描述:输入的第一行有三个数,T,S,D,T表示一共有多少条线路,S表示起点的个数,D表示终点的个数,接下来就是输入T条路的信息了,要你判断从多个起点中任意一个到多个终点中的任意的一个的最短距离是多 ...

随机推荐

  1. Webform购物车(用Session存储,页面传值)

    购物车主要实现的功能: ①在主页面可以将所有商品显示出来,包括价格,库存. ②点击购买可以累加产品,如果是同一种产品,只会累加每种产品的数量. ③查看购物车,可以查看明细,包括所购物品的名称,价格,数 ...

  2. iis上json解析失败404

    控制面板->打开或关闭windows功能->Internet信息服务->万维网服务->应用程序开发功能,勾选上“.net扩展性”和“ASP.NET”,保存后,重启IIS服务器. ...

  3. CSS,bootstrap表格控制当td内容过长时用省略号表示,以及在不使用bootstrap时过长也用省略号表示

    首先需要在table中设置table-layout:fixed; <table style="table-layout:fixed"></table> 然后 ...

  4. HTML-embed标签详解

    Embed(一).基本语法:embed src=url说明:embed可以用来插入各种多媒体,格式可以是 Midi.Wav.AIFF.AU.MP3等等,      Netscape及新版的IE 都支持 ...

  5. as关键词还有另外一个用途,那就是修改 方法 的访问控制

    PHP是单继承的语言,在PHP 5.4 Traits出现之前,PHP的类无法同时从两个基类继承属性或方法.php的Traits和Go语言的组合功能类似,通过在类中使用use关键字声明要组合的Trait ...

  6. Exception在方法继承中的限制

    问题: 父类或接口中定义了方法应该抛出的异常,那么当子类重写方法时应该怎样定义将要抛出的异常: 首先定义异常和父类: class Exception1 extends Exception {} cla ...

  7. BizTalk动手实验(八)消息路由

    1 课程简介 通过本课程熟悉BizTalk消息由的机制 2 准备工作 1. 熟悉XML.XML Schema.XSLT等相关XML开发技术 2. 新建BizTalk空项目 3 演示 3.1 动态消息路 ...

  8. Linux学习笔记---用户管理---组group

    组管理: (1)/etc/group 格式: 组名:密码:GID:组员

  9. php课程---语句及函数

    语句:    一:分支语句        1.if(条件1){满足条件1执行}    2.if(条件1){满足条件1执行}else{不满足条件1执行}    3.if(条件1){满足条件1执行}els ...

  10. IOS第11天(1:UIPickerView点餐)

    UIPickerView #import "ViewController.h" @interface ViewController ()<UIPickerViewDataSo ...