当前位置: 首页 > news >正文

关于狄克斯特拉算法(dijkstra)总结

关于狄克斯特拉算法(dijkstra)总结
1,2,4是四个定点其他的是距离,从2到4最直接的就是2-4,但是不是最近的,需要舒展一下2-1-4,这样只有8.所以才是最短的。这个过程就是狄克斯特拉算法。下面进入正题:
 
关于狄克斯特拉算法(dijkstra)总结

我们这里定义图的编号为:

1 2 3

4 5 6

7 8 9

图1:初始化的图,其中包含边的权值(耗时)。(这里图是有向图)。

图2:确定起点,然后向能直接走到的点走一下,记录此时的估计值:2 6 9.。

图3:找到距离起点最近的点,是正东边的那个点,这时候我们耗费权值为2。然后我们进行松弛操作,从起点到其东南方的点直接到的权值耗费为6,但是我们通过刚刚选定的点,我们找到了到这个点更近的方式,所以这个时候我们说从起点到其东南方向的点的权值更新值从6变成了5。这个时候我们就完成了第一次松弛操作。

图4:依旧是找距离起点最近的点。然后松弛我们发现这个时候从起点到其东南方的点的耗费权值从5又变成了4.这个时候我们完成了第二个松弛。

之后的方式同上:选定距离起点最近的点v。然后通过点v进行松弛操作。我们发现能够通过增加走到目的地方式的复杂度(多转弯)的方式我们能够松弛掉权值,使得耗费的权值更小。
     模板:

void Dij()//我们这里起点为1号编码点。我们这里的d[]表示从起点到这个点需要的权值。w[a][b]表示点a到点b这条边的权值.
{
 int i,j,k,v,tmp;
 memset(vis,0,sizeof(vis));
 for(i=1;i<=n;i++)
     d[i]=w[1][i];//对应图不难理解,对于起点的初始化
 d[1]=0;
 vis[1]=1;
 for(i=1;i<=n;i++)//控制连接点的次数,例如上图,九个点,就循环九次。
 {
  tmp=N;//这里N表示无穷大。也就是图上的99.
  for(j=1;j<=n;j++)
  {
   if(tmp>d[j]&&!vis[j])
   {
    tmp=d[j];
    v=j;
   }
  }//每次我们都找到距离起点最近的点v
  vis[v]=1;
  for(k=1;k<=n;k++)//然后进行松弛操作。

我们这里的d[]表示从起点到这个点需要的权值//加以强调其含义。
{
    if(!vis[k])
   d[k]=min(d[k],d[v]+w[v][k]);
}
}
}
参考博客:http://blog.csdn.net/mengxiang000000/article/details/50421243
 

 

转载于:https://www.cnblogs.com/wuwangchuxin0924/p/5781525.html

相关文章:

  • CSS3实现两行或三行文字,然后多出的部分省略号代替
  • 函数与类
  • DT时代,哪些企业可以成为大数据公司?
  • linux诡异的半连接(SYN_RECV)队列长度
  • Linux静态库和共享库
  • 【Objective-C】04-第一个OC程序解析
  • Python哲学
  • linux ntp时间同步服务器搭建
  • 第二次冲刺阶段04
  • nodejs remote链接mysql数据库总结
  • 网站日志分析工具:WebLog Expert Lite
  • 微信查询高考分数已支持20个城市
  • ubuntu图形界面调出命令行
  • bootstrap常用类
  • Activity的生命周期【翻译】
  • Codepen 每日精选(2018-3-25)
  • CoolViewPager:即刻刷新,自定义边缘效果颜色,双向自动循环,内置垂直切换效果,想要的都在这里...
  • JavaScript/HTML5图表开发工具JavaScript Charts v3.19.6发布【附下载】
  • Java新版本的开发已正式进入轨道,版本号18.3
  • java中的hashCode
  • JS函数式编程 数组部分风格 ES6版
  • Js基础知识(一) - 变量
  • JS实现简单的MVC模式开发小游戏
  • MaxCompute访问TableStore(OTS) 数据
  • nodejs:开发并发布一个nodejs包
  • npx命令介绍
  • Quartz初级教程
  • React-redux的原理以及使用
  • React系列之 Redux 架构模式
  • vue-cli在webpack的配置文件探究
  • 翻译:Hystrix - How To Use
  • 分布式熔断降级平台aegis
  • 开源SQL-on-Hadoop系统一览
  • 那些被忽略的 JavaScript 数组方法细节
  • 使用Envoy 作Sidecar Proxy的微服务模式-4.Prometheus的指标收集
  • 延迟脚本的方式
  • 移动端 h5开发相关内容总结(三)
  • 好程序员大数据教程Hadoop全分布安装(非HA)
  • ​​​​​​​​​​​​​​汽车网络信息安全分析方法论
  • #162 (Div. 2)
  • $forceUpdate()函数
  • (附源码)springboot 基于HTML5的个人网页的网站设计与实现 毕业设计 031623
  • (免费领源码)Java#Springboot#mysql农产品销售管理系统47627-计算机毕业设计项目选题推荐
  • (一)ClickHouse 中的 `MaterializedMySQL` 数据库引擎的使用方法、设置、特性和限制。
  • (一一四)第九章编程练习
  • (转)C语言家族扩展收藏 (转)C语言家族扩展
  • ****** 二 ******、软设笔记【数据结构】-KMP算法、树、二叉树
  • ***监测系统的构建(chkrootkit )
  • .“空心村”成因分析及解决对策122344
  • .bat文件调用java类的main方法
  • .mysql secret在哪_MYSQL基本操作(上)
  • .net Stream篇(六)
  • .NET 服务 ServiceController
  • .net使用excel的cells对象没有value方法——学习.net的Excel工作表问题
  • .sh