dijkstra算法理解+模板
2017-09-17 21:10:45
writer:pprp
看了看dijkstra算法,用自己语言总结一下主要过程吧,
首先,明确这个算法用处是在于计算单源最短路径问题并且边权非负,给出一个起点可以找到其他点的最短路径
复杂度为O(n^2)
思想:贪心的做法,每次只看现在的最短路的部分,但是要记得更新已确定该点到其他点的距离
总结一下,dijkstra的做法:
需要 dis vis map 三个数组
给出起点就可以找到到其他所有点的最短路
1、初始化dis数组和起点的dis和vis
2、进行N个点的N次循环
3、从起点开始,找到距离最短的点
4、然后将其dis和vis更改,
5、更改该点相连的其他点的距离
模板如下:
const int maxn = ;
const int INF = 0x3f3f3f3f;
int mp[maxn][maxn];
bool vis[maxn];
int dis[maxn]; void Dijkstra(int st)
{
for(int i = ; i <= N; i++)//更新dis数组
{
dis[i] = mp[st][i];
}
vis[st] = ;
dis[st] = ;
int rec = -;
for(int i = ; i < N ; i++)//起到了循环的作用
{
Min = INF;
rec = -;
for(int j = ; j <= N; j++)//找到当前的可以到达的最短距离的点
{
if(!vis[j] && Min > dis[j])
{
rec = j;
Min = dis[j];
}
}
if(rec == -)return ;
vis[rec] = ;
for(int j = ; j <= N; j++)//更新该点连接到的其他的点
{
if(!vis[j] && mp[rec][j] != INF && dis[rec] + mp[rec][j] < dis[j])
dis[j] = mp[rec][j] + dis[rec];
}
}
}
使用方法:
for(int i = ; i < maxn; i++)
for(int j = ; j < maxn; j++)
mp[i][j] = INF;
memset(vis,,sizeof(vis));
for(int i = ; i < T ; i++)
{
cin >> x >> y >> v;
if(v < mp[x][y])//去重
mp[x][y] = mp[y][x] = v;
}
Dijkstra(N);
for(int i = ; i < N ; i++)
cout << dis[i] << " ";
cout << endl;
dijkstra算法理解+模板的更多相关文章
- Dijkstra算法求单源最短路径
Description 在每年的校赛里,所有进入决赛的同学都会获得一件很漂亮的t-shirt.但是每当我们的工作人员把上百件的衣服从商店运回到赛场的时候,却是非常累的!所以现在他们想要寻找最短的从商店 ...
- 【hdu 2544最短路】【Dijkstra算法模板题】
Dijkstra算法 分析 Dijkstra算法适用于边权为正的情况.它可用于计算正权图上的单源最短路( Single-Source Shortest Paths, SSSP) , 即从单个源点出发, ...
- Dijkstra算法求最短路模板
Dijkstra算法适合求不包含负权路的最短路径,通过点增广.在稠密图中使用优化过的版本速度非常可观.本篇不介绍算法原理.只给出模板,这里给出三种模板,其中最实用的是加上了堆优化的版本 算法原理 or ...
- dijkstra算法 模板
算法理解见: https://www.bilibili.com/video/av18586085/?p=83 模板: #define INF 1000000000 int N; int dist[10 ...
- 图的最短路径算法Dijkstra算法模板
Dijkstra算法:伪代码 //G为图,一般设为全局变量,数组d[u]为原点到达个点的额最短路径, s为起点 Dijkstra(G, d[u], s){ 初始化: for (循环n次){ u = 是 ...
- 关于dijkstra算法的一点理解
最近在准备ccf,各种补算法,图的算法基本差不多看了一遍.今天看的是Dijkstra算法,这个算法有点难理解,如果不深入想的话想要搞明白还是不容易的.弄了一个晚自习,先看书大致明白了原理,就根据书上的 ...
- [ACM_图论] Domino Effect (POJ1135 Dijkstra算法 SSSP 单源最短路算法 中等 模板)
Description Did you know that you can use domino bones for other things besides playing Dominoes? Ta ...
- 一步一步深入理解Dijkstra算法
先简单介绍一下最短路径: 最短路径是啥?就是一个带边值的图中从某一个顶点到另外一个顶点的最短路径. 官方定义:对于内网图而言,最短路径是指两顶点之间经过的边上权值之和最小的路径. 并且我们称路径上的第 ...
- 最短路径---dijkstra算法模板
dijkstra算法模板 http://acm.hdu.edu.cn/showproblem.php?pid=1874 #include<stdio.h> #include<stri ...
随机推荐
- spring boot 系列学习记录
——初始篇 结束了短学期的课程,初步学习了ssm框架,凭借这些学到的知识完成了短学期的任务-----点餐系统. 通过学长了解到了spring boot ,自己对spring cloud有所耳闻,但是s ...
- 网络编程 - socket通信/粘包/文件传输/udp - 总结
socket通信 1.简单的套接字通信 import socket phone = socket.socket(socket.AF_INET,socket.SOCK_STREAM) phone.bin ...
- VUE的安装与Django之间打通数据
一 VUE的安装与项目创建 1.1.安装nodeJS 官网下载安装:https://nodejs.org/zh-cn/ 1.2.安装脚手架 vue官网 => 学习 => 教程 => ...
- (2.7)Mysql之SQL基础——表的操作与查看
(2.7)Mysql之SQL基础——表的操作与查看 搜索关键字:mysql表操作,comment注释操作,mysql临时表 0.临时表 create temporary table 1.创建表(在in ...
- mysql总结思维导图
mysql总结思维导图.脑图 先整理了一个思维导图出来,到时候再继续补充并且深入挖掘一下,再写博文. 另外,看了很多优秀的博文,在这里先mark一下. https://www.cnblogs.com/ ...
- 看我学习Apache+php+wordpress+phpMyAdmin的搭配配置
开场白:我不是这方面的"专家"或"菜鸟",因为我不懂,别问我为什么,我只是心血来潮好奇,东拼西凑写了这些文字. 1.php的配,使用免安装版本,要进行的设置, ...
- labview 的连接
https://www.youtube.com/watch?v=AsQ56CmnfEA&list=PLp02wZHiCj4tcot7tPumcOeVR51oqzf6V
- Linux下BLAST的使用---转载
1.把BLAST的压缩文件解压,然后将bin目录下的文件拷贝至/usr/local/bin下:2.制作软链接,将解压后的文件中bin目录链接至/home/username下,eg:ln -s /hom ...
- 无线路由MAC地址过滤安全可靠性讨论
无线路由MAC地址过滤安全可靠性讨论/如何实现,真的有效吗,如何防范 [内容导航] 什么是MAC地址过滤 突破MAC地址过滤步骤 捕获的无线客户端MAC地址 更改MAC地址来伪造身份 在W ...
- C# 使用windows服务发送邮件
最近做了一个使用 C# 写了一个发送邮件的 windows 服务,在这里记录一下. 首先使用 Visual Studio 2015 创建一个 windows 服务项目. 然后在设计器上面右击添加安装程 ...