今天还是在温习以前看过的算法,感觉还是很陌生似得!

先粘贴下别人博客上的Dijkstra算法的具体步骤:

Dijkstra算法又称为单源最短路径,所谓单源是在一个有向图中,从一个顶点出发,求该顶点至所有可到达顶点的最短路径问题。  设G=(V,E)是一个有向图,V表示顶点,E表示边。它的每一条边(i,j)属于E,都有一个非负权W(I,j),在G中指定一个结点v0,要求把从v0到G的每一个接vj(vj属于V)的最短有向路径找出来(或者指出不存在)。 Dijstra算法是运用贪心的策略,从源点开始,不断地通过相联通的点找出到其他点的最短距离 基本思想是: 设置一个顶点的集合s,并不断地扩充这个集合,一个顶点属于集合s当且仅当从源点到该点的路径已求出。开始时s中仅有源点,并且调整非s中点的最短路径长度,找当前最短路径点,将其加入到集合s,直到终点在s中。 基本步骤:

1、把所有结点分成两组: 第一组:包括已经确定最短路径的结点; 第二组:包括尚未确定最短路径的结点。

2、开始时,第一组只包含起点,第二组包含剩余的点;

3、用贪心的策略,按最短路径长度递增的顺序把第二组的结点加到第一组去,直到v0可达的所有结点都包含于第一组中。在这个过程中,不断更新最短路径,总保持从v0到第一组各结点的最短路径长度dist都不大于从v0到第二组任何结点的路径长度。

4、每个结点对应一个距离值,第一组结点对应的距离就是v0到此结点的最短路径长度,第二组结点对应的距离值就是v0由第一组结点到此结点的最短路径长度。

5、直到所有的顶点都扫描完毕(v0可达的所有结点都包含于第一组中),找到v0到其它各点的所有最短路径。

如图:求0点到其他点的最短路径。

(1)开始时,s1={v0},s2={v1,v2,v3,v4},v0到各点的最短路径是{0,10,&,30,100};

(2)在还未进入s1的顶点之中,最短路径为v1,因此s1={v0,v1},由于v1到v2有路径,因此v0到各点的最短路径更新为{0,10,60,30,100};

(3)在还未进入s1的顶点之中,最短路径为v3,因此s1={v0,v1,v3},由于v3到v2、v4有路径,因此v0到各点的最短路径更新为{0,10,50,30,90};

(4)在还未进入s1的顶点之中,最短路径为v2,因此s1={v0,v1,v3,v2},由于v2到v4有路径,因此v0到各点的最短路径更新为{0,10,50,30,60};

数据结构:

(1)用一个二维数组a[i..j,i..j]来存储各点之间的距离,10000表示无通路:

(2)用数组dist[i..j]表示最短路径;

(3)用集合s表示找到最短路径的结点。

来自 http://www.cnblogs.com/gzydn/archive/2009/07/09/1520019.html

小练习:HDU 2544 http://acm.hdu.edu.cn/showproblem.php?pid=2544

My code:

#include<stdio.h>
#include<string.h>
#define Max 1000001
int main()
{
int n,m,a,b,c,i,j,min;
int map[102][102];//存储各点之间的距离,1001表示无通路.
int dist[102];//存储起点到各点的最短距离,不断的更新
int v;//表示找到的最短路径的结点
int flag[102];//标记点是否已经在最短路径中
while(scanf("%d %d",&n,&m)!=EOF && n!=0 && m!=0)
{
memset(flag,0,sizeof(flag));
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
map[i][j]=Max;
for(i=1;i<=m;i++)
{
scanf("%d %d %d",&a,&b,&c);
map[a][b]=c;
map[b][a]=c;
flag[a]=flag[b]=1;
}
flag[1]=0;
for(i=1;i<=n;i++)
dist[i]=map[1][i];
for(i=1;i<n;i++)//要找n-1次
{
min=Max;
for(j=1;j<=n;j++)
{
if(flag[j]==1 && min>dist[j])
{
v=j;
min=dist[j];
}
}
flag[v]=0;
for(j=1;j<=n;j++)
{
if(flag[j]==1 && map[v][j]+dist[v]<dist[j])
dist[j]=map[v][j]+dist[v];
}

}
printf("%d\n",dist[n]);
}
return 0;
}

转载于:https://www.cnblogs.com/ciangcic/p/3527995.html

Dijkstra最短路径相关推荐

  1. LeetCode 505. 迷宫 II(BFS / Dijkstra 最短路径)

    文章目录 1. 题目 2. 解题 2.1 BFS 2.2 Dijkstra 最短路径 1. 题目 由空地和墙组成的迷宫中有一个球. 球可以向上下左右四个方向滚动,但在遇到墙壁前不会停止滚动. 当球停下 ...

  2. aes算法c语言实现_C语言实现常用数据结构:Dijkstra最短路径算法(第18篇)

    「今天是学习C语言第 161 天」 纸上学来终觉浅,绝知此事要躬行.-- 陆游「冬夜读书示子聿」#题外话算法学习重点是学习如何编程使用它. # Dijkstra算法 Dijkstra算法,中文译名迪杰 ...

  3. Dijkstra最短路径算法——java代码实现

    具体的算法详解可以看这篇博客Dijkstra最短路径算法详解. 这里我利用.txt文件存储了有向加权图中顶点之间的连接关系以及边上的权重,文件格式如下: 代码所构造的有向加权图如下: package ...

  4. matlab工具箱计算最小生成树_matlab_bgl 图论基本函数库, 相当丰富.包含工具箱、 、Dijkstra最短路径、 254万源代码下载- www.pudn.com...

    文件名称: matlab_bgl下载  收藏√  [ 5  4  3  2  1 ] 开发工具: matlab 文件大小: 7394 KB 上传时间: 2016-03-30 下载次数: 0 详细说明: ...

  5. c语言迪杰斯特拉算法求最短路径,迪杰斯特拉 ( Dijkstra ) 最短路径算法

    迪杰斯特拉算法介绍 迪杰斯特拉(Dijkstra)算法是典型最短路径算法,用于计算一个节点到其他节点的最短路径.它的主要特点是以起始点为中心向外层层扩展(广度优先搜索思想),直到扩展到终点为止. 基本 ...

  6. 算法学习(10):LeetCode刷题之Dijkstra最短路径算法

    前言: 迪杰斯特拉(Dijkstra)最短路径算法是求有向加权图中某个节点到其他节点的最短路径."图"这种数据结构的具体实现就是"邻接矩阵"或者"邻接 ...

  7. 算法分析与设计课程设计-Dijkstra最短路径算法

    算法分析与设计课程设计报告书       题目:Dijkstra最短路径算法 设计人:张钦颖 班级:14计科2班    学号:1414080901218 一.     实验环境: 1.硬件环境:个人机 ...

  8. python 深度优先最短路径,广度优先最短路径,dijkstra最短路径及可视化

    简要说明 通过使用python实现图的可视化,以及广度优先的最短距离,深度优先的最短路径,dijkstra的最短路径 dijkstra最短路径 深度优先最短路径 深度优先忘记标路径的边及方向 广度优先 ...

  9. dijkstra最短路径算法视频_java实现Dijkstra算法求最短路径

    Dijkstra(迪杰斯特拉)算法是典型的最短路径路由算法,用于计算一个节点到其他所有节点的最短路径.主要特点是以起始点为中心向外层层扩展,直到扩展到终点为止. Dijkstra一般的表述通常有两种方 ...

  10. Dijkstra 最短路径算法详解 无向图

    对于最短路径问题,这里介绍一种O(N^2)的求解方法.    对于求最短路径的问题一般都会给出一幅图,或者边与边的关系.如上图. 假设我们起点是A,我们要求到F的最短距离,我们会怎么做?  首先,因为 ...

最新文章

  1. win7(x64)安装oracle 10g 32位的方法
  2. 前端如何实现音乐盒胶盘的转动_郑州Web前端入门教程之如何实现图片优化?
  3. jQuery实现布局高宽自适应
  4. 信息学奥赛一本通 1115:直方图 | OpenJudge NOI 1.9 09
  5. Unity官方教程Ruby大冒险的自学笔记
  6. C51单片机学习思维导图
  7. 【kafka】InvalidReplicationFactorException: Replication factor: 1 larger than available brokers: 0
  8. Python在使用pip安装某个库时报错 Could not find a version that satisfies the requirement numpy
  9. java json 转数据_Java解析(读取)Json数据{}、[{}](转)
  10. 冰点密码破解 — 强悍的调试器 SOFTICE 1
  11. 程序员专用壁纸!!!
  12. Android 9 禁用按住电源键+音量加键进入工厂测试(recovery模式)功能
  13. C语言基础100例子
  14. PHP队列的实现,看完秒懂
  15. Android-隐藏app图标以及隐式启动
  16. 香帅的北大金融学课笔记4 -- 基金
  17. 前沿 | 社区问答系统及相关技术
  18. 社团招新如何吸引新人,制作一张好的海报最关键
  19. matlab——灰色预测
  20. exdoll机器人_打造国内领先的定制化人工智能机器人品牌, EXDOLL新品惊艳亮相_TOM新闻...

热门文章

  1. 编译原理完整学习笔记(八):目标代码生成
  2. mysql卸载注意问题_mysql卸载注意事项
  3. SVN源码泄露漏洞总结
  4. 合并报表编制采用的理论_跟我一起学合并报表之——长期股权投资的抵消处理...
  5. gg product
  6. 6-3 图片合成视频
  7. 使用ifconfig命令来看网卡的IP,但是,输入命令之后,eht0里面只有 inet6 addr 而没有 inet addr...
  8. 【BZOJ 1082】[SCOI2005]栅栏 二分+dfs
  9. 移动端调试工具-Debuggap
  10. 一、HTML和CSS基础--HTML+CSS基础课程--第2部分