【hdu 2544最短路】【Dijkstra算法模板题】
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算法模板题】的更多相关文章
- ACM: HDU 2544 最短路-Dijkstra算法
HDU 2544最短路 Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u Descrip ...
- HDOJ/HDU 2544 最短路---dijkstra算法
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2544 这题的思路可以见这里(同一类型):http://blog.csdn.net/xiaozhuaix ...
- hdu 2544 最短路 Dijkstra
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2544 题目分析:比较简单的最短路算法应用.题目告知起点与终点的位置,以及各路口之间路径到达所需的时间, ...
- HDU 2544最短路dijkstra模板题
最短路 Time Limit: 5000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submis ...
- hdu-2544-最短路(dijkstra算法模板)
题目链接 题意很清晰,入门级题目,适合各种模板,可用dijkstra, floyd, Bellman-ford, spfa Dijkstra链接 Floyd链接 Bellman-Ford链接 SPFA ...
- 最短路径Dijkstra算法模板题---洛谷P3371 【模板】单源最短路径(弱化版)
题目背景 本题测试数据为随机数据,在考试中可能会出现构造数据让SPFA不通过,如有需要请移步 P4779. 题目描述 如题,给出一个有向图,请输出从某一点出发到所有点的最短路径长度. 输入格式 第一行 ...
- 最短路Dijkstra算法模板
// // dijkstra妯℃澘.cpp // algorithm // // Created by david.xu on 2018/8/6. // Copyright 漏 2018骞?david ...
- HDU 2544 最短路(dijkstra+邻接矩阵)
( ̄▽ ̄)" #include<iostream> #include<cstdio> using namespace std; const int INF=10e7; ...
- hdu2544 最短路 Dijkstra算法
最短路(Dijkstra算法模板题) Time Limit: 5000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Other ...
随机推荐
- Greenplum高可用真的高吗?
目录 1. 问题描述 2. 解决方案 @ 1. 问题描述 在项目中使用了Greenplum做分析型数据库,Greenplum自身已经提供了高可用方案,Master节点提供Sdanby备用节点,Segm ...
- Bzoj 2839 集合计数 题解
2839: 集合计数 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 495 Solved: 271[Submit][Status][Discuss] ...
- python菜鸟基础知识(一)
第三章 基础 3.1程控制语句 3.1.1if语句 1.单if if 关键字 空格 条件 冒号 缩进 结果 print(1) if 3 > 2: print(9) print(8) 2 ...
- 论样式表css的重要性
如下图所示两个网页代码基本相同,但左边网页加入样式表后就形成了右边的视觉效果,由此可见 在网页中html用于标记,css用于显示,而JavaScript则用于增强与用户的交互性. 加入的代码是 < ...
- Android问题解决
1.clean之后R文件消失 clean之后R文件消失是因为布局的XML文件存在错误,无法编译你的资源文件,所以无法自动生成R文件,在Problem.LogCat等界面查看错误的原因,把错误改正即可: ...
- 【原】深度学习的一些经验总结和建议 | To do v.s Not To Do
前言:本文同步发布于公众号:Charlotte数据挖掘,欢迎关注,获得最新干货- 昨天看到几篇不同的文章写关于机器学习的to do & not to do,有些观点赞同,有些不赞同,是现在算法 ...
- Windows+Apache+Python+Django 踩坑记录
摘要 使用Python进行Web项目开发:相对于主流三大Web端解决方案(Java/.NET/PHP) Python在某些方面具有一定的优势,相对 Java/.NET 有更轻量级的部署方案,相对PHP ...
- gRPC in ASP.NET Core 3.0 -- Protocol Buffer(1)
现如今微服务很流行,而微服务很有可能是使用不同语言进行构建的.而微服务之间通常需要相互通信,所以微服务之间必须在以下几个方面达成共识: 需要使用某种API 数据格式 错误的模式 负载均衡 ... 现在 ...
- Java NIO学习系列六:Java中的IO模型
前文中我们总结了linux系统中的5中IO模型,并且着重介绍了其中的4种IO模型: 阻塞I/O(blocking IO) 非阻塞I/O(nonblocking IO) I/O多路复用(IO multi ...
- win10下nodejs的安装及配置
这里主要引用两篇文章,写的非常详细,也能解决你可能出现的问题 nodejs安装及配置 如何删除之前nodejs设置的 npm config set prefix .....