Dijkstra算法

朴素版Dijkstra算法

一.适用范围:

  单源最短路,所有边权都是正数,(朴素版Dijkstra 时间复杂度O(n的平方) ),稠密图(边数远远大于点数)

二.算法思路:

  1.初始化距离

  各个顶点到源点的距离为正无穷(memset(dist,0x3f,dist)源点本身到源点的距离为0(dist[1]=0);

  2.循环遍历

   s:当前已经确定最短距离的点;

   t:不在s中的,距离最近的点;

      将t加入到s中去;

   用t更新其他点的距离;

    

1
2
3
4
5
6
7
8
9
10
11
12
13
for(int i=0;i<n;i++)
{
    int t=-1;
    for(int j=1;j<=n;j++)
    {
        if(!str[j]&&(t==-1||dist[t]>dist[j])) t=j;
    }
    str[t]=1;
    for(int j=1;j<=n;j++)
   {
      dist[j]=min(dist[j],dist[t]+g[t][j]);
    }
}     

  

三:算法示例演示 

 

 

 邻接矩阵存图

 

 

 用一维数组dist[N]存储点1到各个顶点的距离

距离点1最近的点是点2,点2确定

 

 距离点2最近的点是点4,点4确定

 

 ...  ...

  

 

 

posted @   Mrr-  阅读(180)  评论(0编辑  收藏  举报
编辑推荐:
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· Vue3状态管理终极指南:Pinia保姆级教程
点击右上角即可分享
微信分享提示