单源最短路——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出发到其他任意 ...
随机推荐
- mybatis batch批量提交大量数据
转载:https://blog.csdn.net/Java_Mr_Zheng/article/details/50476757 在xml文件配置多条参数同时插入: <insert id=&quo ...
- 启动Mysql数据库报错误:-bash: ./start.sh: Permission denied
linux下安装好Mysql数据库后,输入启动命令: cd /home/homework/mysql && ./start.sh 回车后报如下错误: 原因是:该文件未有相关执行权限 解 ...
- mysql 计算两点经纬度之间的直线距离(具体sql语句)
文章转载地址 http://blog.sina.com.cn/s/blog_7bbfd5fd01017d1e.html 新增sql语句具体实现 计算距离(单位 m)并排序 longitude 经度 l ...
- 浏览器打开exe文件
<win-r> regedit 打开注册表,然后自定义协议 自定义协议注册表.reg 打开后导入 Windows Registry Editor Version 5.00 [HKEY_CL ...
- java实现爬虫功能
/** * 爬取新闻信息,封装成实体bean */public class GetNews { public List<News> getNews() { // 存储新闻对象 List ...
- Mysql 索引迁移策略
Mysql 索引迁移策略 近日在核查项目中的一些慢sql时发现一个很鸡仔儿的问题,本地开发库表中索引跟生产上差距很大,又因为生产库登录各种麻烦,需要各种验证码,那么多的慢sql分给好些个人,不可能让大 ...
- 【MySQL】锁——查看当前数据库锁请求的三种方法 20
MySQL提供了查看当前数据库锁请求的三种方法:1. show full processlist命令 观察state和info列 2. show engine innodb status\G ...
- 下载频道--IT资源关东煮第二期[申明:来源于网络]
下载频道–IT资源关东煮第二期[申明:来源于网络] 地址:http://geek.csdn.net/news/detail/129509?ref=myread
- pytorch入门与实践-2.2
Tensor 1--本质上可以理解为具有不同维度的数组 2--支持的基本运算 |---创建Tensor: x=t.tensor(x,y) x,y 表示数组的大小 , x=t.rand(x,y), x ...
- 请大神留言:使用static方法和从Spring IOC 容器里面取出的方法有什么区别????
类的静态方法,不用new出对象,因为它在类的初始化阶段加载到jvm内存的. 而spring容器,是在启动服务的时候,new出容器所管理的对象. 本质区别就是一个在堆中产生了对象,一个没产生对象只在方法 ...