最短路之Dijkstra算法

简介: 最短路之Dijkstra算法

单源最短路径Dijkstra

关于原理

看文—看图

注意

注意Dijkstra不能处理存在负边权的题目

由于“估计值”5<6,所以3先确定了,3确定了之后再确定的2,所以1->3的距离不会变


以A为源,线路是单向的,也就是说A->B最小就是4,不会等于2的


模板

#include<iostream>
#include<stdio.h>
#include<algorithm>
#include<string.h>
#define INF 0x3f3f3f3f
using namespace std;
int map[1005][1005];
int dis[1005],book[1005];
int main() {
  int n,m;
  while(cin>>m>>n) {
    memset(dis,0,sizeof(dis));
    memset(book,0,sizeof(book));
    memset(map,INF,sizeof(map));
    for(int i=1; i<=n; i++)
      map[i][i]=0;//自己到自己为0,其他初始化为正无穷
    for(int i=1; i<=m; i++) {
      int x,y,z;
      cin>>x>>y>>z;
      map[x][y]=z;
    }
    for(int i=1; i<=n; i++)
      dis[i]=map[1][i];//以1为源,存储1到别的点的“估计值”
    book[1]=1;//点1是确定值
    for(int i=1; i<=n-1; i++) {
      int min=INF;
      int u=1;
      for(int j=1; j<=n; j++) {
        if(book[j]==0 && dis[j]<min) {
          min=dis[j];
          u=j;//在估计值中选取权最小的
        }
      }
      book[u]=1;//把1到别的点的“估计值”的权最小的点变成确定值
      for(int j=1; j<=n; j++) {
        if(map[u][j]<INF ) {//找到与u相连的点,设为x
          if(dis[j]>dis[u]+map[u][j] && book[j]==0 )//更新估计值,确定值不变
            dis[j]=dis[u]+map[u][j];//1->u,u->x的线路比1->x的线路优,所以更新1->x的线路
        }
      }
    }
    cout<<dis[n]<<endl;//dis[n]即1->x的最短路
  }
}



目录
相关文章
|
16天前
|
机器学习/深度学习 算法 Java
算法设计(动态规划应用实验报告)实现基于贪婪技术思想的Prim算法、Dijkstra算法
这篇文章介绍了基于贪婪技术思想的Prim算法和Dijkstra算法,包括它们的伪代码描述、Java源代码实现、时间效率分析,并展示了算法的测试用例结果,使读者对贪婪技术及其应用有了更深入的理解。
算法设计(动态规划应用实验报告)实现基于贪婪技术思想的Prim算法、Dijkstra算法
|
16天前
|
算法
路径规划算法 - 求解最短路径 - Dijkstra(迪杰斯特拉)算法
路径规划算法 - 求解最短路径 - Dijkstra(迪杰斯特拉)算法
32 0
|
2月前
|
算法
基于Dijkstra算法的最优行驶路线搜索matlab仿真,以实际城市复杂路线为例进行测试
使用MATLAB2022a实现的Dijkstra算法在城市地图上搜索最优行驶路线的仿真。用户通过鼠标点击设定起点和终点,算法规划路径并显示长度。测试显示,尽管在某些复杂情况下计算路径可能与实际有偏差,但多数场景下Dijkstra算法能找到接近最短路径。核心代码包括图的显示、用户交互及Dijkstra算法实现。算法基于图论,不断更新未访问节点的最短路径。测试结果证明其在简单路线及多数复杂城市路况下表现良好,但在交通拥堵等特殊情况下需结合其他数据提升准确性。
|
2月前
|
资源调度 算法 定位技术
|
2月前
|
算法 Java C++
《经典图论算法》迪杰斯特拉算法(Dijkstra)
这个是求最短路径的迪杰斯特拉算法,另外我还写了50多种《经典图论算法》,每种都使用C++和Java两种语言实现,熟练掌握之后无论是参加蓝桥杯,信奥赛,还是其他比赛,或者是面试,都能轻松应对。
|
3月前
|
存储 算法 数据可视化
Dijkstra算法在《庆余年》中的应用:范闲的皇宫之旅
Dijkstra算法在《庆余年》中的应用:范闲的皇宫之旅
|
3月前
|
算法 定位技术
探寻最短路径之谜:Dijkstra算法详解
探寻最短路径之谜:Dijkstra算法详解
|
18天前
|
算法
基于模糊控制算法的倒立摆控制系统matlab仿真
本项目构建了一个基于模糊控制算法的倒立摆控制系统,利用MATLAB 2022a实现了从不稳定到稳定状态的转变,并输出了相应的动画和收敛过程。模糊控制器通过对小车位置与摆的角度误差及其变化量进行模糊化处理,依据预设的模糊规则库进行模糊推理并最终去模糊化为精确的控制量,成功地使倒立摆维持在直立位置。该方法无需精确数学模型,适用于处理系统的非线性和不确定性。
基于模糊控制算法的倒立摆控制系统matlab仿真
|
13天前
|
算法 数据安全/隐私保护
基于LS算法的OFDM+QPSK系统信道估计均衡matlab性能仿真
基于MATLAB 2022a的仿真展示了OFDM+QPSK系统中最小二乘(LS)算法的信道估计与均衡效果。OFDM利用多个低速率子载波提高频谱效率,通过循环前缀克服多径衰落。LS算法依据导频符号估计信道参数,进而设计均衡器以恢复数据符号。核心程序实现了OFDM信号处理流程,包括加性高斯白噪声的加入、保护间隔去除、快速傅立叶变换及信道估计与均衡等步骤,并最终计算误码率,验证了算法的有效性。
32 2
|
13天前
|
算法
基于GA-PSO遗传粒子群混合优化算法的CVRP问题求解matlab仿真
本文介绍了一种基于GA-PSO混合优化算法求解带容量限制的车辆路径问题(CVRP)的方法。在MATLAB2022a环境下运行,通过遗传算法的全局搜索与粒子群算法的局部优化能力互补,高效寻找最优解。程序采用自然数编码策略,通过选择、交叉、变异操作及粒子速度和位置更新,不断迭代直至满足终止条件,旨在最小化总行驶距离的同时满足客户需求和车辆载重限制。

热门文章

最新文章

下一篇
云函数