2017-07-26 22:30:45

writer:pprp

dijkstra算法法则:设置顶点集合S,首先将起始点加入该集合,然后根据起始点到其他顶点的路径长度,

选择路径长度最小的顶点加入到集合S,根据所加入顶点更新源点到其他顶点的路径长度,然后再选取最小边的顶点;

实现:用邻接矩阵

适用条件:图中任意一个边都是正的

我的理解:从某一点出发,找到与该点临近有路径的点,找到其中最短路径的点,将其标记,表示已经访问过了,

然后更新距离的数组(如果通过两步路径和要比一步的路要短),还需要在深刻理解一下;


代码如下:

  1. #include <iostream>
  2.  
  3. using namespace std;
  4.  
  5. const int INF = ;
  6. int n;
  7. int map[][]; //储存图
  8. int visit[] = {0}; //设置访问标记
  9. int d[]; //源点到各节点的最小距离
  10.  
  11. void init()
  12. {
  13. cin >> n;
  14. for(int i = ; i <= n ; i++)
  15. for(int j = ; j <= n ; j++)
  16. {
  17. cin >> map[i][j];
  18. if(map[i][j] == )
  19. map[i][j] = INF;
  20. }
  21. }
  22.  
  23. void Dijkstra(int x) //从x点开始到其他源点的距离
  24. {
  25. int i,j,Min,p;
  26. for(i =; i<=n; i++)
  27. d[i] = map[x][i]; //初始化最小距离
  28. visit[x] = ; //标记为已访问过
  29. d[x] = ; //自身到自身为0
  30. for(i = ; i < n; i++)
  31. {
  32. Min = INF; //找最小边
  33. for(j = ; j<=n; j++) //找出总和最短路径
  34. {
  35. if(!visit[j]&&Min>d[j])
  36. {
  37. p = j;
  38. Min = d[j];
  39. }
  40. }
  41. visit[p] = ;
  42. for(j = ; j <= n; j++)
  43. {
  44. if(!visit[j]&&Min+map[p][j]<d[j])
  45. d[j] = Min+map[p][j];
  46. }
  47. }
  48. for(i = ;i <= n ;i++)
  49. cout <<d[i]<<" ";
  50. cout << endl;
  51. }
  52.  
  53. int main()
  54. {
  55. init();
  56. Dijkstra();
  57. return ;
  58. }

Dijkstra算法 - 最短路径算法的更多相关文章

  1. (Dijkstra)迪杰斯特拉算法-最短路径算法

    迪杰斯特拉算法是从一个顶点到其余各顶点的最短路径算法,解决的是有向图中最短路径问题.迪杰斯特拉算法主要特点是以起始点为中心向外层层扩展,直到扩展到终点为止. 算法思想:设G=(V,E)是一个带权有向图 ...

  2. Relaxation step(Dijkstra's 最短路径算法)

    翻译成中文就是"松弛",属于工程优化的范畴: Dijkstra 的单源最短路径算法,有一个重要的步奏,当访问到新的结点 u (加入到集合 S),然后遍历 u 的邻接顶点(Adj), ...

  3. 最短路径算法——Dijkstra,Bellman-Ford,Floyd-Warshall,Johnson

    根据DSqiu的blog整理出来 :http://dsqiu.iteye.com/blog/1689163 PS:模板是自己写的,如有错误欢迎指出~ 本文内容框架: §1 Dijkstra算法 §2 ...

  4. Dijkstra 单源最短路径算法

    Dijkstra 算法是一种用于计算带权有向图中单源最短路径(SSSP:Single-Source Shortest Path)的算法,由计算机科学家 Edsger Dijkstra 于 1956 年 ...

  5. 几大最短路径算法比较(Floyd & Dijkstra & Bellman-Ford & SPFA)

    几个最短路径算法的比较:Floyd 求多源.无负权边(此处错误?应该可以有负权边)的最短路.用矩阵记录图.时效性较差,时间复杂度O(V^3).       Floyd-Warshall算法(Floyd ...

  6. 带权图的最短路径算法(Dijkstra)实现

    一,介绍 本文实现带权图的最短路径算法.给定图中一个顶点,求解该顶点到图中所有其他顶点的最短路径 以及 最短路径的长度.在决定写这篇文章之前,在网上找了很多关于Dijkstra算法实现,但大部分是不带 ...

  7. Dijkstra 最短路算法(只能计算出一条最短路径,所有路径用dfs)

    上周我们介绍了神奇的只有五行的 Floyd 最短路算法,它可以方便的求得任意两点的最短路径,这称为"多源最短路".本周来来介绍指定一个点(源点)到其余各个顶点的最短路径,也叫做&q ...

  8. 最短路径算法之Dijkstra算法(java实现)

    前言 Dijkstra算法是最短路径算法中为人熟知的一种,是单起点全路径算法.该算法被称为是“贪心算法”的成功典范.本文接下来将尝试以最通俗的语言来介绍这个伟大的算法,并赋予java实现代码. 一.知 ...

  9. 最短路径算法(Dijkstra算法、Floyd-Warshall算法)

    最短路径算法具体的形式包括: 确定起点的最短路径问题:即已知起始结点,求最短路径的问题.适合使用Dijkstra算法. 确定终点的最短路径问题:即已知终结结点,求最短路径的问题.在无向图中,该问题与确 ...

随机推荐

  1. 【BZOJ2055】80人环游世界 有上下界费用流

    [BZOJ2055]80人环游世界 Description     想必大家都看过成龙大哥的<80天环游世界>,里面的紧张刺激的打斗场面一定给你留下了深刻的印象.现在就有这么     一个 ...

  2. 14.wamp自定义网站根目录

    1.首先打开Apache 中的配置文件httpd.conf crtl+f 搜索  documentroot  ,在找到的目录中将目录修改自己的网站的目录,注意\ 与/ 2.在向下移动,找到<Di ...

  3. delphi inifile 支持 utf8

    1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 3 ...

  4. 转!!Java的三种代理模式

    转自 http://www.cnblogs.com/cenyu/p/6289209.html 1.代理模式 代理(Proxy)是一种设计模式,提供了对目标对象另外的访问方式;即通过代理对象访问目标对象 ...

  5. PHP去除所有的空格

    1.去除两边的空格 trim($arr) 2.正则匹配去除所有的空格 preg_replace('# #','',$goodid)

  6. 我的Android进阶之旅------>解决Error:Unable to find method 'org.gradle.api.internal.project.ProjectInternal.g

    错误描述 今天在Github上面下载了一份代码,然后导入到Android Studio中直接报了如下图所示的错误: 错误描述如下: Error: Unable to find method 'org. ...

  7. 算法分析之——heap-sort堆排序

    堆排序是一种原地排序算法,不使用额外的数组空间,运行时间为O(nlgn).本篇文章我们来介绍一下堆排序的实现过程. 要了解堆排序.我们首先来了解一个概念,全然二叉树. 堆是一种全然二叉树或者近似全然二 ...

  8. Leetcode 之 Exclusive Time of Functions

    636. Exclusive Time of Functions 1.Problem Given the running logs of n functions that are executed i ...

  9. 七牛云 如何配置域名的 CNAME

    CNAME 简介 CNAME 即指别名记录,也被称为规范名字.这种记录允你将多个名字映射到同一台计算机. 当需要将域名指向另一个域名,再由另一个域名提供 ip地址,就需要添加 CNAME 记录. 为什 ...

  10. 类型“Microsoft.Office.Interop.Word.ApplicationClass”未定义构造函数

    错误 4317 无法嵌入互操作类型“Microsoft.Office.Interop.Word.ApplicationClass”.请改用适用的接口. 类型“Microsoft.Office.Inte ...