用于求正权有向图 上的 单源最短路

优化后时间复杂度O(mlogn)

模板

// Dijkstra
// to get the minumum distance with no negtive ways
//
// Description:
// 1. get vertex with minumum distance
// 2. do relax
//
// Details:
// 1. use priority_queue and pair<dis, verIdx>
// 2. use dis[verIdx] as minumum marks (pair.dis=dis[pair.verIdx]?)
// 3. initialize edge, G, dis and que typedef pair<int, int> Node; // dist, VerIdx
const int maxn=205, maxm=maxn*maxn, INF=0x3f3f3f3f;
struct Edge{
int from, to, dist;
Edge(int from=0, int to=0, int dist=0):
from(from),to(to),dist(dist) {}
};
vector<Edge> edge;
vector<int> G[maxn+5];
void AddEdge(int from, int to, int val){
edge.push_back(Edge(i, j, val);
G[i].push_back(edge.size()-1);
edge.push_back(Edge(j, i, val));
G[j].push_back(edge.size()-1);
} int Dijkstra(int st, int tar){
memset(dist, INF, sizeof(dist));
priority_queue<Node, vector<Node>, greater<Node> > que;
que.push(Node(0, st));
memset(dist, -1, sizeof(dist)); dist[st]=0;
while (que.size()){
Node x=que.top(); que.pop();
if (x.first!=dist[x.second]) continue;
// vertax minized int &from=x.second;
for (int i=0; i<G[from].size(); i++){
Edge &e=edge[G[from][i]];
int &to=e.to;
if (dist[to]<=dist[from]+e.dis) continue;
dist[to]=dis+e.dis;
que.push(Node(dist[to], to));
}
}return dist[tar];
}

注意

  1. 需要初始化dist为INF;edge, G为空
  2. 注意优先队列的优先大小,用greater 使dist小的作为队头
  3. 考虑dist[k]==INF,为不存在路径

例题

二进制状态,隐式图搜索

UVA-658 It's not a Bug, it's a Feature!

模板题

POJ-1502 MPI Maelstrom

[笔记-图论]Dijkstra的更多相关文章

  1. Cocos2d-x 地图步行实现1:图论Dijkstra算法

    下一节<Cocos2d-x 地图行走的实现2:SPFA算法>: http://blog.csdn.net/stevenkylelee/article/details/38440663 本文 ...

  2. 图论——Dijkstra算法

    图论其实是比较难的一种题型,但是一些模板题,是没有什么太大难度的! 这里给大家带来的是迪杰斯特拉(Dijkstra)算法. 迪杰斯特拉算法是由荷兰计算机科学家狄克斯特拉于1959 年提出的,因此又叫狄 ...

  3. Light OJ 1019 - Brush (V)(图论-dijkstra)

    题目链接:http://www.lightoj.com/volume_showproblem.php?problem=1019 题目大意:Tanvir想从节点1的位置走到节点n的位置, 输出最短距离, ...

  4. [图论]Dijkstra 算法小结

    Dijkstra 算法小结  By Wine93 2013.11 1. Dijkstra 算法相关介绍 算法阐述:Dijkstra是解决单源最短路径的算法,它可以在O(n^2)内计算出源点(s)到图中 ...

  5. 算法笔记_068:Dijkstra算法简单介绍(Java)

    目录 1 问题描述 2 解决方案 2.1 使用Dijkstra算法得到最短距离示例 2.2 具体编码   1 问题描述 何为Dijkstra算法? Dijkstra算法功能:给出加权连通图中一个顶点, ...

  6. 图论——Dijkstra+prim算法涉及到的优先队列(二叉堆)

    [0]README 0.1)为什么有这篇文章?因为 Dijkstra算法的优先队列实现 涉及到了一种新的数据结构,即优先队列(二叉堆)的操作需要更改以适应这种新的数据结构,我们暂且吧它定义为Dista ...

  7. 图论·Dijkstra·HDU2066

    这道题刚做的时候用的Floyd,果断超时,于是去学了Dijkstra,主函数和Floyd很像. 原理: 从起点开始,找最近的又未标记的点,记录距离,标记此点,再找此点附近相连的未标记的点,记录下距离, ...

  8. 图论--Dijkstra算法总结

    Key word: ①BFS转换Dijkstra ②其他关系转化为最短路 ③反向建边及反向Dijkstra ④稠密图.稀疏图 ⑤链式前向星 ⑥Vector建图 ⑦超级源点&汇点 详解: 1.B ...

  9. 【uva 658】It's not a Bug, it's a Feature!(图论--Dijkstra或spfa算法+二进制表示+类“隐式图搜索”)

    题意:有N个潜在的bug和m个补丁,每个补丁用长为N的字符串表示.首先输入bug数目以及补丁数目.然后就是对M个补丁的描述,共有M行.每行首先是一个整数,表明打该补丁所需要的时间.然后是两个字符串,第 ...

随机推荐

  1. mysql表空间传输(ERROR 1808) row_format设置

    文章结构如下: 从MYSQL5.6版本开始,引入了传输表空间这个功能,可以把一张表从一个数据库移到另一个数据库或者机器上.迁移的时候很方便,尤其是大表. 由于本次达到测试使用版本5.6.38传到5.7 ...

  2. GPG加密windows中使用

    在Windows系统使用Gpg4win进行加密解密 2015-06-15 by u014076884 GPG,又称为GnuPG,全称是Gnu Private Guard,即GNU隐私卫士.GPG是以P ...

  3. yaml文件结构

    VERSION: 1.0.0.1            --指定控制文件schema的版本DATABASE: db_name           --指定连接数据库的名字,如果没有指定,由环境变量$P ...

  4. POJ 2386 Lake Counting【BFS】

    题意:给出一个矩形,问有多少块连通的W 当找到W的时候,进行广搜,然后将搜过的W变成点,直到不能再搜,进行下一次广搜,最后搜的次数即为水塘的个数 看的PPT里面讲的是种子填充法. 种子填充算法: 从多 ...

  5. 如何给table的指定td进行css样式改变

    td:nth-child(){background-color:#; color:#fff;}/*把第3个td的背景设为黑色*/ :nth-child()不止可以给table指定样式 p标签页是可以的 ...

  6. 解决css兼容性

    关于CSS对各个浏览器兼容已经是老生常谈的问题了, 网络上的教程遍地都是.以下内容没有太多新颖, 纯属个人总结, 希望能对初学者有一定的帮助. 一.CSS HACK 以下两种方法几乎能解决现今所有HA ...

  7. POJ-1743 Musical Theme 字符串问题 不重叠最长重复子串

    题目链接:https://cn.vjudge.net/problem/POJ-1743 题意 给一串整数,问最长不可重叠最长重复子串有多长 注意这里匹配的意思是匹配串的所有元素可以减去或者加上某个值 ...

  8. HDU 6051 If the starlight never fade(原根+推式子)

    题目大意: 设\(f(i)\)为使\((x+y)^i \equiv x^i (mod\ p)\)成立的(x,y)的对数.其中\(1 \leq x \leq p-1 , 1\leq y\leq m\), ...

  9. (QT)在命令行编译ui文件和程序

    1.新建helloworld_2文件夹,将helloworld里的main.cpp和hellodialog.cpp两个文件复制过来. 2.打开控制台.此时不能用cmd,否则不能出最后的结果(lz在运行 ...

  10. System.IO.IsolatedStorage 使用 IsolatedStorageFileStream 存储信息

    在C#中还有一种叫做IsolatedStorage的存储机制,他存储信息的方式类似于我们的cookie, IsolatedStorage存储独立于每一个application,换句话说我们加载多个应用 ...