#include <iostream>
using namespace std;
const int inf=1000;
int s[100],t[100];
int map[100][100];int v,n;void dijkstra()
{        s[1]=0,t[1]=0;           //使用零来实现也是可以的。     for(int i=2;i<=v;i++)        s[i]=map[1][i];         //不断的进行松弛。     for(int i=2;i<=v;i++)    {         //首先是选择距离顶点一最小的那一个顶点的。        int themin=inf;        int flag;        for(int j=2;j<=v;j++)     //使用的是s[],只能是用一个的。         {            if(t[j]!=0&&s[j]<themin)   //只是用t【i】来标志是不是加上了。用来表示其中的具体含义。             {                themin=s[j];                flag=j;                }            }        t[flag]=0;                   //一个是标志,另一个是结果。                               for(int j=1;j<=v;j++)        //清楚所代表的意思就行了。        {            if(t[j]!=0&&map[flag][j]+s[flag]<s[j])    //应该是已经进行了遍历。                 {                s[j]=s[flag]+map[flag][j];          //选择s【j】中最短的。             }        }                  }       for(int i=1;i<=v;i++)          cout<<s[i]<<" ";                  cout<<endl;
}   int main()
{          cout<<"请输入顶点数(从一开始)"<<endl;    cin>>v;        cout<<"请输入边数"<<endl;    cin>>n;    cout<<"请输入每条边的长度。(如果没有直接到达的是inf)"<<endl;         for(int i=0;i<=v;i++)    //初始化应该在输入之前。太早和太完都是不行的。                     for(int j=0;j<=v;j++)        {            map[i][j]=inf;            s[i]=inf;            t[i]=inf;        //t[i]仅仅只是一个标志罢了。             if(i==j)                map[i][j]=0;         }    for(int i=1;i<=n;i++)                {        int a,b;        cin>>a>>b;        cin>>map[a][b];    }    dijkstra();    return 0;
} 

Dijkstra算法实现相关推荐

  1. [C] Dijkstra算法——通过边实现松弛

    Dijkstra算法--通过边实现松弛 本算法学习指定一个点(源点)到其余各个顶点的最短路径,也叫做单源最短路径例如求下图1号顶点到2,3,4,5,6号顶点的最短路径 这个时候你可能就要问了,为什么不 ...

  2. 经典算法研究系列:二、Dijkstra 算法初探

    经典算法研究系列:二.Dijkstra 算法初探  July   二零一一年一月 ====================== 本文主要参考:算法导论 第二版.维基百科. 写的不好之处,还望见谅. 本 ...

  3. 贪心算法单源点最短路径例题c语言源代码,Dijkstra算法是解单源最短路径问题的一个贪心算法...

    问题描述 给定一个带权有向图 G=(V,E) ,其中每条边的权是一个非负实数. 另外,还给定 V 中的一个项点,称为源. 现在我们要计算从源到所有其他各项点的最短路径长度. 这里的长度是指路上各边权之 ...

  4. 数据结构与算法(7-4)最短路径(迪杰斯特拉(Dijkstra)算法、弗洛伊德(Floyd)算法)

    目录 一.最短路径概念 二.迪杰斯特拉(Dijkstra)算法(单源最短路径) 1.原理 2.过程 3.代码 三.弗洛伊德(Floyd)算法(多源最短路径) 1.原理 2.存储 3.遍历 4.代码 参 ...

  5. 【算法】【ACM】深入理解Dijkstra算法(单源最短路径算法)

    Dijkstra算法是用来求解从某个源点到其他各顶点的最短路径(单源最短路径). 下面的Dijkstra算法的讲解都是基于这个有向图,在遇到其他问题可以类比. 算法的基本思想: 把图中的定点分成两组, ...

  6. 拿来就能用!Dijkstra 算法实现快递路径优化

    作者 | 李秋键 责编 | 伍杏玲 出品 | AI科技大本营(ID:rgznai100) 近几年来,快递行业发展迅猛,其中的程序设计涉及到运送路径的最优选择问题,下面我们尝试模拟实现快递路径优化问题, ...

  7. 基于Dijkstra算法的武汉地铁路径规划!

    ↑↑↑关注后"星标"Datawhale 每日干货 & 每月组队学习,不错过 Datawhale干货 作者:牧小熊,华中农业大学,Datawhale原创作者 前言 最近爬取了 ...

  8. 【路径规划】Dijkstra算法——超详细原理图解

    Dijkstra算法详解 1. Dijkstra算法原理  1.1. 有向图的Dijkstra算法  1.2. 无向图和栅格网络的拓展   1.2.1. 无向图   1.2.2. 栅格网络 2. Di ...

  9. 图论-最短路Dijkstra算法详解超详 有图解

    整体来看dij就是从起点开始扩散致整个图的过程,为什么说他稳定呢,是因为他每次迭代,都能得到至少一个结点的最短路.(不像SPFA,玄学复杂度) 但是他的缺点就是不能处理带负权值的边,和代码量稍稍复杂. ...

  10. 【Dijkstra算法】未优化版+优先队列优化版

    https://blog.csdn.net/YF_Li123/article/details/74090301 Dijkstra算法伪代码://G为图:数组d为源点到达各点的最短路径长度,s为起点 D ...

最新文章

  1. Mac用户SVN图形界面推荐
  2. linux 脚本 获取当前目录,Linux下获取脚本当前工作目录的一点感触
  3. Ajax Beta 2.0 中 AtlasToolKit Library 控件 Accordion 后台添加
  4. 分享一个基于事件时间线的Javascript类库-Chronoline
  5. django缓存优化(二)
  6. Linux c++ udp按包发送接收文件
  7. 旋转矩阵与欧拉角的相互转换及代码
  8. 时态数据库的应用介绍(1)
  9. 数据库之常用SQL语句整合
  10. Oracle P6 -SQLServer数据库乱码案例分享
  11. 福昕PDF编辑器中文版(FoxitPDFEditor)绿色版
  12. 数据库优化---空间换时间优化
  13. linux常用之必备基础命令一
  14. 知乎爬虫与数据分析(一)数据爬取篇
  15. 颜色匹配 opencv版
  16. unity换装骨骼、蒙皮、动作之美
  17. css分块代码,30 Seconds of CSS代码块解读(视觉篇)
  18. 华为手机刷微博体验更好?技术角度的分析和思考,Android基础72问
  19. 信奥中的数学:排列组合
  20. 码农翻身——Redis:MySQL算老几?

热门文章

  1. Java easycms 版本2.0发布
  2. union万能密码By:dangdang
  3. NOIP2008 双栈排序
  4. L(A/N)MP 中遇到的MySQL的坑
  5. 【转】notepad++设置字体和字体大小
  6. linux 命令 rsync
  7. pandas(二) -- Dataframe创建及索引
  8. manjaro linux换源
  9. linux fedora35安装deepin-wine:deepin-wine-on-fedora项目
  10. 【收藏】vue3+vite+ts 封装axios踩坑记录