Dijkstra算法

分析

Dijkstra算法适用于边权为正的情况。它可用于计算正权图上的单源最短路( Single-Source Shortest Paths, SSSP) , 即从单个源点出发, 到所有结点的最短路(这样最后返回你想要的那个节点对应的距离即可)。 该算法同时适用于有向图和无向图。

其伪代码如下:

清除所有点的标号
设d[0]=0, 其他d[i]=INF //INF被定义为一个很大的数字
循环n次 {
在所有未标号结点中, 选出d值最小的结点x
给结点x标记
对于从x出发的所有边(x,y), 更新d[y] = min{d[y], d[x]+w(x,y)} //w(x,y)是指边xy对应的权值
}

模板

可以根据上面的伪代码帮助理解

int Dijk()
{
memset(vis, 0, sizeof(vis));
memset(d, 0, sizeof(d));
for(int i = 1; i <= N; i++)
d[i] = route[i][1]; //这里考虑的是1为起点,具体根据实际情况而定 for(int i = 1; i <= N; i++)
{
int x, minn = INF;
for(int j = 1; j <= N; j++)
{
if(!vis[j] && d[j] < minn) //在所有未标号结点中, 选出d值最小的结点x
{
minn = d[j];
x = j;
}
}
vis[x] = 1; //标记它
for(int y = 1; y <= N; y++)
d[y] = min(d[y], d[x] + route[x][y]);
}
return d[...]; //根据题意要求进行返回相应的值
}
int main()
{
for(int i = 1; i <= N; i++)
{
for(int j = 1; j <= N; j++)
{
if(i == j)
route[i][j] = 0;
else
route[i][j] = INF;
}
}
...处理route数组
//具体根据实际情况填写
...
Dijk(); }

以上内容参考自刘汝佳的《算法竞赛入门经典》

题目链接

AC代码

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int maxn = 100 + 10;
const int INF = 0x3f3f3f3f;
int N, M;
int a, b, c;
int route[maxn][maxn], d[maxn];
int vis[maxn];
int Dijk()
{
memset(vis, 0, sizeof(vis));
memset(d, 0, sizeof(d));
for(int i = 1; i <= N; i++)
d[i] = ((i == 1) ? 0 : INF); //这里的条件设置根据题意自行判断
for(int i = 1; i <= N; i++)
{
int x, minn = INF;
for(int j = 1; j <= N; j++)
{
if(!vis[j] && d[j] < minn) //在所有未标号结点中, 选出d值最小的结点x
{
minn = d[j];
x = j;
}
}
vis[x] = 1; //标记它
for(int y = 1; y <= N; y++)
d[y] = min(d[y], d[x] + route[x][y]);
}
return d[N];
}
void init()
{
for(int i = 1; i <= N; i++)
{
for(int j = i + 1; j <= N; j++)
route[i][j] = route[j][i] = INF;
}
}
int main()
{
// freopen("input.txt", "r", stdin);
// freopen("output.txt", "w", stdout);
while(cin >> N >> M && N && M)
{
init();
for(int i = 0; i < M; i++)
{
cin >> a >> b >> c;
route[a][b] = route[b][a] = c;
}
int minn = Dijk();
cout << minn << endl;
} }

【hdu 2544最短路】【Dijkstra算法模板题】的更多相关文章

  1. ACM: HDU 2544 最短路-Dijkstra算法

    HDU 2544最短路 Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u Descrip ...

  2. HDOJ/HDU 2544 最短路---dijkstra算法

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2544 这题的思路可以见这里(同一类型):http://blog.csdn.net/xiaozhuaix ...

  3. hdu 2544 最短路 Dijkstra

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2544 题目分析:比较简单的最短路算法应用.题目告知起点与终点的位置,以及各路口之间路径到达所需的时间, ...

  4. HDU 2544最短路dijkstra模板题

    最短路 Time Limit: 5000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submis ...

  5. hdu-2544-最短路(dijkstra算法模板)

    题目链接 题意很清晰,入门级题目,适合各种模板,可用dijkstra, floyd, Bellman-ford, spfa Dijkstra链接 Floyd链接 Bellman-Ford链接 SPFA ...

  6. 最短路径Dijkstra算法模板题---洛谷P3371 【模板】单源最短路径(弱化版)

    题目背景 本题测试数据为随机数据,在考试中可能会出现构造数据让SPFA不通过,如有需要请移步 P4779. 题目描述 如题,给出一个有向图,请输出从某一点出发到所有点的最短路径长度. 输入格式 第一行 ...

  7. 最短路Dijkstra算法模板

    // // dijkstra妯℃澘.cpp // algorithm // // Created by david.xu on 2018/8/6. // Copyright 漏 2018骞?david ...

  8. HDU 2544 最短路(dijkstra+邻接矩阵)

    ( ̄▽ ̄)" #include<iostream> #include<cstdio> using namespace std; const int INF=10e7; ...

  9. hdu2544 最短路 Dijkstra算法

    最短路(Dijkstra算法模板题) Time Limit: 5000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Other ...

随机推荐

  1. Redis主从复制实现原理

    一.Redis2.8之前的版本, 首先redis复制功能分为同步操作和命令传播两个操作 同步操作作于将从服务器的数据库状态更新至主服务器当前所处的数据库状态  命令传播操作则用于在主服务器的数据库状态 ...

  2. Netty-Channel架构体系源码解读

    全文围绕下图,Netty-Channel的简化版架构体系图展开,从顶层Channel接口开始入手,往下递进,闲言少叙,直接开撸 概述: 从图中可以看到,从顶级接口Channel开始,在接口中定义了一套 ...

  3. CAD2014学习笔记-图层图案图块

    基于 虎课网huke88.com CAD教程 对象特性 选择对象点击特性栏/或右键点击特性 颜色:color 图层 线型:线的类型,如点状线.虚线等,若不改变则默认新建的线为该类型 线型比例:不同类型 ...

  4. AT173 単位:题解

    题目链接:https://www.luogu.org/problemnew/show/AT173 分析: 首先,我们可以做如下排序: sort(a+1,a+1+n); 因为题目告诉我们了要出席最少的次 ...

  5. 用canvas绘制时钟

    用canvas做时钟其实很简单,下面是我做出的效果: 是不是还挺漂亮的? 下面上代码: html <div class="whole"> <canvas id=& ...

  6. 为什么选择 Spring 作为 Java 框架

    1. 概述 在本文中,我们将讨论 Spring 作为最流行的 Java 框架之一的主要价值体现. 最重要的是,我们将尝试理解 Spring 成为我们选择框架的原因.Spring 的详细信息及其组成部分 ...

  7. TreeMap 还能排序?分析下源码就明白了

    Java 中的 Map 是一种键值对映射,又被称为符号表或字典的数据结构,通常使用哈希表来实现,但也可使用二叉查找树.红黑树实现. HashMap 基于哈希表,但迭代时不是插入顺序 LinkedHas ...

  8. PHP中的$_GET变量

    定义 在 PHP 中,预定义的 $_GET 变量用于收集来自 method="get" 的表单中的值. $_GET 变量 预定义的 $_GET 变量用于收集来自 method=&q ...

  9. Openstack中用keypair生成和访问虚机的方法

    Openstack中用keypair生成和访问虚机的方法 标签:task   iso   perm   cte   生成   复制   vol   rsa   sla Openstack中用镜像文件生 ...

  10. spark 源码分析之十九 -- Stage的提交

    引言 上篇 spark 源码分析之十九 -- DAG的生成和Stage的划分 中,主要介绍了下图中的前两个阶段DAG的构建和Stage的划分. 本篇文章主要剖析,Stage是如何提交的. rdd的依赖 ...