最短路之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的最短路
  }
}



目录
相关文章
|
2月前
|
人工智能 算法 数据可视化
路径规划最全综述+代码+可视化绘图(Dijkstra算法+A*算法+RRT算法等)-2
路径规划最全综述+代码+可视化绘图(Dijkstra算法+A*算法+RRT算法等)-2
214 0
|
3月前
|
算法
最短路之Floyd算法
最短路之Floyd算法
32 1
|
2月前
|
存储 人工智能 算法
路径规划最全综述+代码+可视化绘图(Dijkstra算法+A*算法+RRT算法等)-1
路径规划最全综述+代码+可视化绘图(Dijkstra算法+A*算法+RRT算法等)-1
70 0
|
1月前
|
算法
关于Dijkstra算法
关于Dijkstra算法
|
3月前
|
算法
bellman_ford算法与dijkstra为什么dijkstra算法不能计算带有负权边图
bellman_ford算法与dijkstra为什么dijkstra算法不能计算带有负权边图
22 0
|
3月前
|
算法
leetcode-675:为高尔夫比赛砍树 (最短路径算法bfs,dijkstra,A*)
leetcode-675:为高尔夫比赛砍树 (最短路径算法bfs,dijkstra,A*)
31 0
|
3月前
|
存储 算法
最短路之SPFA算法
最短路之SPFA算法
26 0
|
1月前
|
传感器 算法 计算机视觉
基于肤色模型和中值滤波的手部检测算法FPGA实现,包括tb测试文件和MATLAB辅助验证
该内容是关于一个基于肤色模型和中值滤波的手部检测算法的描述,包括算法的运行效果图和所使用的软件版本(matlab2022a, vivado2019.2)。算法分为肤色分割和中值滤波两步,其中肤色模型在YCbCr色彩空间定义,中值滤波用于去除噪声。提供了一段核心程序代码,用于处理图像数据并在FPGA上实现。最终,检测结果输出到&quot;hand.txt&quot;文件。
|
1月前
|
机器学习/深度学习 算法 计算机视觉
基于yolov2深度学习网络的视频手部检测算法matlab仿真
基于yolov2深度学习网络的视频手部检测算法matlab仿真
|
1月前
|
算法
【MATLAB】语音信号识别与处理:移动中位数滤波算法去噪及谱相减算法呈现频谱
【MATLAB】语音信号识别与处理:移动中位数滤波算法去噪及谱相减算法呈现频谱
23 2