#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. 一种精确从文本中提取URL的思路及实现
  2. 【干货】就这一篇,解决90% 新手连接虚拟机的网络问题
  3. VHDL/Verilog编译错误总结
  4. 插入空行_如何一键插入表格空行,这个方法才最高级!
  5. 无人车是怎样一步步学会开车的? | 自动驾驶科普
  6. 数字的格式化c语言课程设计,【图片】发几个C语言课程设计源代码(恭喜自己当上技术小吧主)【东华理工大学吧】_百度贴吧...
  7. Python课程第九周笔记及作业+第十周期末测试
  8. zune自搭虚拟服务器离线升级,Zune 30g 购买/使用 个人经验贴,希望可以帮到有需要的烧友~...
  9. 中国5G基站将带动155GWh以上锂电池需求
  10. 【经验篇】记如何排查Linux服务器CPU使用率过高的问题
  11. 关于应用服务器和数据库服务器的区别浅谈
  12. RK3399 制作更新logo.img
  13. [TCP灵魂之问]介绍一下 TCP 报文头部的字段
  14. 职业也如学习一样,逆水行舟不进则退
  15. Procreate闪闪的神仙笔刷合集,IPad绘画必备
  16. 【Albert带你1小时看遍美国前沿科技与商业运作】微访谈精选
  17. 【转】如何使用分区助手完美迁移系统到SSD固态硬盘?
  18. react native 初构建之我等到花儿都谢了
  19. 常微分方程 知识结构
  20. Source and destination overlap in mempcpy

热门文章

  1. UIModalPresentationStyle 各种类型的区别
  2. nginx配置tomcat负载均衡,nginx.conf配置文件的配置
  3. openstack中手动修改虚拟机IP后不能通信
  4. 【C++】实现动态顺序表的PushBack(),PopBack(),PushFront(),PopFront(),Find(),Insert
  5. Apache Thrift的使用
  6. 12月16日文章排行点评及编辑部训练
  7. mysql 中default 和NULL
  8. 一篇文章教你学会Java基础I/O流
  9. mybatis批量插入(insert)和批量更新(update)
  10. sts(eclipse)安装svn插件