单源最短路——Dijkstara算法
算法基本思想:每次找到离源点最近的一个顶点,然后以该顶点为中心进行扩展,最终得到源点到其余所有点的最短路径。
1、将所有的顶点分为两个部分:已知最短路程的顶点集合P和未知最短路径的顶点集合Q
2、设置源点s到自己的最短路径为0,若存在有源点能够直接到达的顶点i则吧dis[i]设置为e[s][i]。同时把所有其它不能直接到达的顶点的最短路径设置为∞
3、在集合Q的所有顶点中选择一个离源点s最近的顶点u即dis[u]最小,加入到集合P。并考察所有以点u为起点地边,对每条边进行松弛操作。
4、重复第三步,直到集合Q为空,算法结束。最终dis数组中的值就是源点到所有顶点的最短路径。
//dijketra算法
int main()
{
int e[][];
int book[];
int dis[];
int i, j, n, m, t1, t2, t3, u, v, min;
int inf = ;//用inf存储一个我们认为的正无穷值 //读入n和m;n表示定点个数,m表示边的条数
scanf("%d%d",&n,&m); //初始化e矩阵
for (i = ; i <= n; i++)
for (j = ; j <= n; j++)
if (i == j) e[i][j] = ;
else e[i][j] == inf; // 读入边
for (i = ; i <= m; i++)
{
scanf("%d%d%d",&t1,&t2,&t3);
e[t1][t2] = t3;
}
//初始化dis数组,这里是1号顶点到其余各个顶点的初始路程。
for (i = ; i <= n; i++)
dis[i] = e[][i]; //book数组初始化,book数组用来记录当前点是否被访问,访问1 else0
for (i = ; i <= n; i++)
book[i] = ;
book[] = ;//一号顶点标记 //核心算法
for (i = ; i <= n - ; i++)
{
//找到离一号顶点最近的顶点
min = inf;//将最小值复制为无穷
for (j = ; j <= n; j++)
{
//如果当前顶点没有被访问,并且当前dis数组中的值小于最小值
if (book[j] == && dis[j] < min)
{
min = dis[j];//更新最小值
u = j;// 标记当前点
}
}
book[u] = ;//标记当前点被访问
for (v = ; v <= n; v++)
{
if (e[u][v] < inf)
{
//遍历u打头的e数组
if (dis[v] > dis[u] + e[u][v])
dis[v] = dis[u] + e[u][v];//获得最短路径
}
}
}
//输出结果
for (i = ; i <= n; i++)
{
printf("%d\t",dis[i]);
}
getchar(); getchar();
return ;
}
单源最短路——Dijkstara算法的更多相关文章
- 单源最短路——Bellman-Ford算法
1.Dijkstra的局限性 Dijkstra算法是处理单源最短路径的有效算法,但它局限于边的权值非负的情况,若图中出现权值为负的边,Dijkstra算法就会失效,求出的最短路径就可能是错的. 列如以 ...
- 单源最短路——dijkstra算法
Dijkstra算法 1.定义概览 Dijkstra(迪杰斯特拉)算法是典型的单源最短路径算法,用于计算一个节点到其他所有节点的最短路径.主要特点是以起始点为中心向外层层扩展,直到扩展到终点为止. 问 ...
- 图论-单源最短路-SPFA算法
有关概念: 最短路问题:若在图中的每一条边都有对应的权值,求从一点到另一点之间权值和最小的路径 SPFA算法的功能是求固定起点到图中其余各点的的最短路(单源最短路径) 约定:图中不存在负权环,用邻接表 ...
- 单源最短路 Bellman-Ford算法(有向图)
// 单源最短路问题 // Bellman-Ford算法 // 复杂度O(V*E) //! 可以判断负圈 #include <cstdio> #include <iostream&g ...
- 单源最短路dijkstra算法&&优化史
一下午都在学最短路dijkstra算法,总算是优化到了我能达到的水平的最快水准,然后列举一下我的优化历史,顺便总结总结 最朴素算法: 邻接矩阵存边+贪心||dp思想,几乎纯暴力,luoguTLE+ML ...
- 单源最短路Dijkstra算法——matlab实现
迪杰斯特拉(Dijkstra)算法是典型最短路径算法,用于计算一个节点到其他节点的最短路径. 它的主要特点是以起始点为中心向外层层扩展(广度优先搜索思想),直到扩展到终点为止. 基本思想 通过Dijk ...
- 单源最短路(Dijkstra算法)
#返回上一级 @Author: 张海拔 @Update: 2015-03-11 @Link: http://www.cnblogs.com/zhanghaiba/p/3514570.html Dijk ...
- 单源最短路——SPFA算法(Bellman-Ford算法队列优化)
spfa的算法思想(动态逼近法): 设立一个先进先出的队列q用来保存待优化的结点,优化时每次取出队首结点u,并且用u点当前的最短路径估计值对离开u点所指向的结点v进行松弛操作,如果v点的最短路 ...
- 单源最短路Dijstra算法
Dijstra算法是寻找从某一顶点i出发到大其他顶点的最短路径.Distra算法的思想与Prim算法很像,它收录顶点的规则是按照路径长度递增的顺序收录的.设v0是源顶点,我们要寻找从v0出发到其他任意 ...
随机推荐
- yii2 緩存
1.Yii框架的缓存 主要就是“memcache” 和 “cache”两种 Yii的自带缓存都继承CCache 类, 在使用上基本没有区别 2.使用方法 (1)在config配置文件main.php文 ...
- 直播框架ijkplayer
直播框架ijkplayer [如何快速的开发一个完整的iOS直播app](播放篇) ijkplayer ios项目集成(图文详细版) 一步步搭建视频直播系统,基于LFLiveKit+ijkplayer ...
- Educational Codeforces Round 4
612A - The Text Splitting 20171121 简单字符串处理题 #include<stdlib.h> #include<stdio.h> #inc ...
- oracle sqlplus命令详解
涉及到的知识要点 a.带有一个&的替换变量的用法b.带有两个&的替换变量用法c.define命令用法d.accept命令用法e.定制SQL*Plus环境f.在glogin.sql文件中 ...
- java获取当前网站的IP地址
package ip; import java.net.InetAddress; import java.net.UnknownHostException; /** * * @author * */ ...
- 百度地图API密钥
百度地图API密钥 DD279b2a90afdf0ae7a3796787a0742e nSxiPohfziUaCuONe4ViUP2N /*亲测可用*/ PlhFWpA02aoURjAOpnWcR ...
- Oracle课程档案,第六天
体系结构: instance:实例 database:数据库 RAC:多实例对一个数据库 SGA:最大总数 (系统全局区域)缓存区 PGA:其中的一块, 也是一个缓存区 server process: ...
- 使用强类型DataSet增加数据并获取自动增长的ID
使用强类型的DataSet可以方便的操作数据库:有时候我们会对表的ID设置为自动增长,并且需要在插入数据后获取新插入数据的ID,按以下方法即可达到目的: 一. 首先建立一个表,id为自动增加, ...
- 我了解到的新知识之---Cylance Protect是干吗的?
每家企业都会采购适合自己的杀毒软件来保护企业内的电脑处在安全的状态下,我所在的公司目前在用的是来自美国的初创企业的产品Cylance Protect.,目前这家公司已经在2018年11月份被黑莓公司收 ...
- 线程同步-使用ReaderWriterLockSlim类
使用ReaderWriterLockSlim创建一个线程安全的机制,在多线程中对一个集合进行读写操作.ReaderWriterLockSlim代表了一个管理资源访问的锁,允许多个线程同时读取,以及独占 ...