最短路--Dijkstra
Dijkstra--单源最短路
算法思想
主要记住这句话:每次选择没有被访问过的,并且dis最小的点,加入集合,更新dis
模板
int dis[maxn],vis[maxn];    //距离,标记
void dijkstra()
{
    int k = 1,mi;
    vis[k] = 1;                        //初始化
    mem(dis,inf); //wa
    for(int i = 1; i <= n; i++)
        dis[i] = a[k][i];
    for(int i = 1; i < n; i++)            //共选n-1次
    {
        mi = inf;
        for(int j = 1; j <= n; j++)        //每次选dis最小的点,加入集合
        {
            if(!vis[j] && mi > dis[j])
            {
                mi = dis[j];
                k = j;
            }
        }
        if(mi == inf) break;
        vis[k] = 1;
        for(int j = 1; j <= n; j++)                //再根据选的点,更新其他点
        {
            if(!vis[j] && dis[j] > dis[k]+a[k][j])
                dis[j] = dis[k]+a[k][j];
        }
    }
}
优先队列优化
struct node
{
    int v,w;
    bool operator < (const node x) const    //结构体重载<
    {
        return w > x.w;
    }
    node(int a,int b){v = a,w = b;}
};
vector<node> a[maxn];
int dis[maxn];
bool vis[maxn];
void dijkstra(int s)
{
    mem(dis,inf); dis[s] = 0;
    priority_queue<node> q;
    q.push(node(s,dis[s]));
    node now(0,0);
    while(!q.empty())
    {
        now = q.top();
        q.pop();
        if(vis[now.v]) continue;
        vis[now.v] = 1;
        for(auto i : a[now.v])
        {
            if(dis[i.v] > dis[now.v] + i.w)
            {
                dis[i.v] = dis[now.v] + i.w;
                q.push(node(i.v,dis[i.v]));
            }
        }
    }
}
例题
参考博客
https://blog.csdn.net/kprogram/article/details/81225176
最短路--Dijkstra的更多相关文章
- hdu 2544 最短路 Dijkstra
		题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2544 题目分析:比较简单的最短路算法应用.题目告知起点与终点的位置,以及各路口之间路径到达所需的时间, ... 
- 算法学习笔记(三) 最短路 Dijkstra 和 Floyd 算法
		图论中一个经典问题就是求最短路.最为基础和最为经典的算法莫过于 Dijkstra 和 Floyd 算法,一个是贪心算法,一个是动态规划.这也是算法中的两大经典代表.用一个简单图在纸上一步一步演算,也是 ... 
- 单源最短路dijkstra算法&&优化史
		一下午都在学最短路dijkstra算法,总算是优化到了我能达到的水平的最快水准,然后列举一下我的优化历史,顺便总结总结 最朴素算法: 邻接矩阵存边+贪心||dp思想,几乎纯暴力,luoguTLE+ML ... 
- HUD.2544 最短路 (Dijkstra)
		HUD.2544 最短路 (Dijkstra) 题意分析 1表示起点,n表示起点(或者颠倒过来也可以) 建立无向图 从n或者1跑dij即可. 代码总览 #include <bits/stdc++ ... 
- 训练指南 UVALive - 4080(最短路Dijkstra + 边修改 + 最短路树)
		layout: post title: 训练指南 UVALive - 4080(最短路Dijkstra + 边修改 + 最短路树) author: "luowentaoaa" ca ... 
- 训练指南 UVA - 10917(最短路Dijkstra + 基础DP)
		layout: post title: 训练指南 UVA - 10917(最短路Dijkstra + 基础DP) author: "luowentaoaa" catalog: tr ... 
- 训练指南 UVA - 11374(最短路Dijkstra + 记录路径 + 模板)
		layout: post title: 训练指南 UVA - 11374(最短路Dijkstra + 记录路径 + 模板) author: "luowentaoaa" catalo ... 
- 最短路Dijkstra算法的一些扩展问题
		最短路Dijkstra算法的一些扩展问题 很早以前写过关于A*求k短路的文章,那时候还不明白为什么还可以把所有点重复的放入堆中,只知道那样求出来的就是对的.知其然不知其所以然是件容易引发伤痛的 ... 
- 华夏60 战斗机(最短路dijkstra)
		华夏60 战斗机(最短路dijkstra) 华夏60 超音速战斗机是当今世界上机动性能最先进的战斗机.战斗过程中的一个关键问题是如何在最短的时间内使飞机从当前的飞行高度和速度爬升/俯冲到指定的高度并达 ... 
- Til the Cows Come Home 最短路Dijkstra+bellman(普通+优化)
		Til the Cows Come Home 最短路Dijkstra+bellman(普通+优化) 贝西在田里,想在农夫约翰叫醒她早上挤奶之前回到谷仓尽可能多地睡一觉.贝西需要她的美梦,所以她想尽快回 ... 
随机推荐
- Python19之函数和过程
			一.函数和过程 函数和过程都是指一段实现特定功能的代码段,如果该代码段有返回值则称为函数,否则称为过程. 注:Python中只有函数而没有过程,就算是函数体内没有return语句返回一个值,Pytho ... 
- laravel框架视图中常用的逻辑结构forlese,foreach,ifelse等
			if 和else @if($name === 1) 这个数字是1 @else 这个数字非1 @endif switch @switch($name) @case(1) 变量name == 1 @bre ... 
- WUSTOJ 1304: 最大最小公倍数(Java)
			题目链接: 
- LINUX驱动笔记 目录
			笔记参考了宋宝华老师的<Linux设备驱动开发详解:基于最新的Linux 4.0内核>以及韦东山老师的嵌入式驱动教程 笔记开发环境: 单板:第一章到第八章使用TINY4412-1611:第 ... 
- Java8新特性 - 新时间和日期 API
			本地时间和时间戳 主要方法: now:静态方法,根据当前时间创建对象 of:静态方法,根据指定日期/时间创建对象 plusDays,plusWeeks,plusMonths,plusYears:向当前 ... 
- wannafly 挑战赛10  小H和密码
			题意:中文题就不解释了 题解: dp[i][j]表示前i 个轮盘 和一个字符串前j 个字符的匹配情况 ,具体的状态转移解释见代码 #include <cstdio> #include &l ... 
- 读取普通java web项目下的WEB-INF目录下的配置文件(application.xml,xx.properties等配置文件)
			一.在Java web工程WEB-INF下创建weixin.properties属性文件 weixin.properties属性文件里内容如下: 二.创建PropertiesUtils.java测试类 ... 
- iPhone电话与短信相关代码小结
			关于iPhone上电话与短信相关功能,做一个简单总结: 使用公开SDK能实现的功能: (1)获取和操作通讯录.使用函数 ABAddressBookRequestAccessWithCompletion ... 
- [转]大牛们是怎么阅读 Android 系统源码的
			转自:http://www.zhihu.com/question/19759722 由于工作需要大量修改framework代码, 在AOSP(Android Open Source Project)源 ... 
- PHP设置谷歌验证器(Google Authenticator)实现操作二步验证
			使用说明:开启Google的登陆二步验证(即Google Authenticator服务)后用户登陆时需要输入额外由手机客户端生成的一次性密码.实现Google Authenticator功能需要服务 ... 
