文转:http://blog.csdn.net/zxq2574043697/article/details/9451887

一:

最短路径算法
1. 迪杰斯特拉算法
2. 弗洛伊德算法
二:
1. 迪杰斯特拉算法
从源点到其余各点的最短路径
最短路径的长度递增的次序求得各条路径
路径长度最短的最短路径的特点:
在这条路径上,必定只含一条弧,并且这条弧的权值最小
下一条路径长度次短的最短路径的特点:
它只可能有两种情况:或是直接从源点到该(只含一条弧)或者是从源点经过顶点v1,再到达该顶点(由两条弧组成)
再下一条路径长度次短的最短路径的特点:
它可能有三种情况:或者是直接从源点到该(只含一条弧)或者是从源点经过顶点v1,再到达该顶点(由两条弧组成);或者是从源点经过顶点v2,再到达该顶点。
其余最短路径的特点:
它或者是直接从源点到该点(只含一条弧)或者是从源点经过已求得最短路径的顶点,再到达该顶点
迪杰斯特拉算法
算法:
(a) 初始化:用起点v到该顶点w的直接边(弧)初始化最短路径,否则设为∞;
(b)从未求得最短路径的终点中选择路径长度最小的终点u:即求得v到u的最短路径;
(c) 修改最短路径:计算u的邻接点的最短路径,若(v,…,u)+(u,w)<(v,…,w),则以(v,…,u,w)代替。
(d) 重复(b)-(c),直到求得v到其余所有顶点的最短路径。
特点:总是按照从小到大的顺序求得最短路径
顶点A到其他顶点的最短路径
Dijkstra算法可描述如下:
初始化:S { v}; 
         dist[jEdge[0][j],   j = 1, 2, …, n-1;
                                         // n为图中顶点个数
· 求出最短路径的长度:
         dist[k min{ dist[i] },  iÎV;
         SSU { k};
¸ 修改: 
      dist[i min{ dist[i], dist[k] + Edge[k][i] },
               对于每一个iÎV;
¹ 判断:  若S = V, 则算法结束,否则转
 
二:

弗洛伊德算法
求每对顶点之间的最短路径。
依次计算矩阵A(0),A(1),…,A(n)。
A(0)为邻接矩阵,
计算A(k)时,
A(k)(i,j)=min{A(k-1)(i,j), A(k-1)(i,k)+A(k-1)(k,j)}
A(0) [i][j]是从顶点vv, 中间顶点是v0的最短路径的长度,  A(k) [i][j]是从顶点vv,  中间顶点的序号不大于k的最短路径的长度, A(n-1)[i][j]是从顶点vv的最短路径长度。
 
弗洛伊德算法的基本思想是:
 vi  vj 的所有可能存在的路径中,选出一条长度最短的路径
次试探:
<vi,vj>存在,则存在路径{vi,vj}
                // 路径中不含其它顶点
<vi,v0>,<v0,vj>存在,则存在路径{vi,v0,vj}
             // 路径中所含顶点序号不大于0
{vi,…,v1}, {v1,…,vj}存在,
   则存在一条路径{vi, …, v1, …vj}
             // 路径中所含顶点序号不大于1
      
依次类推,则 vi  vj 的最短路径应是上述这些路径中,路径长度最小者
 
求每对顶点之间的最短路径
 
 
 
弗洛伊德算法
技巧:计算A(k)的技巧。
k行、第k列、对角线的元素保持不变,对其余元素,考查A(i,j)A(i,k)+A(k,j)(第k列i“行”元素加上第k行j“列”元素,简记为“行+列”),如果后者更小则替换A(i,j),同时修改路径。
本节给出的求解最短路径的算法不仅适用于带权有向图,对带权无向图也可以适用。因为带权无向图可以看作是有往返二重边的有向图,只要在顶点vi vj 之间存在无向边(vi vj ),就可以看成是在这两个顶点之间存在权值相同的两条有向边< vi vj >和< vj vi >。
试利用Dijkstra算法求下图中从顶点1到其他各顶点间的最短路径,写出执行算法过程中各步的状态
 
 

图(最短路径算法————迪杰斯特拉算法和弗洛伊德算法).RP的更多相关文章

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

    迪杰斯特拉(Dijkstra)算法主要是针对没有负值的有向图,求解其中的单一起点到其他顶点的最短路径算法.本文主要总结迪杰斯特拉(Dijkstra)算法的原理和算法流程,最后通过程序实现在一个带权值的 ...

  2. 数据结构与算法——迪杰斯特拉(Dijkstra)算法

    tip:这个算法真的很难讲解,有些地方只能意会了,多思考多看几遍还是可以弄懂的. 应用场景-最短路径问题 战争时期,胜利乡有 7 个村庄 (A, B, C, D, E, F, G) ,现在有六个邮差, ...

  3. c/c++ 图的最短路径 Dijkstra(迪杰斯特拉)算法

    c/c++ 图的最短路径 Dijkstra(迪杰斯特拉)算法 图的最短路径的概念: 一位旅客要从城市A到城市B,他希望选择一条途中中转次数最少的路线.假设途中每一站都需要换车,则这个问题反映到图上就是 ...

  4. 理解最短路径——迪杰斯特拉(dijkstra)算法

    原址地址:http://ibupu.link/?id=29 1.       迪杰斯特拉算法简介 迪杰斯特拉(dijkstra)算法是典型的用来解决最短路径的算法,也是很多教程中的范例,由荷兰计算机科 ...

  5. 单源最短路径算法——Dijkstra算法(迪杰斯特拉算法)

    一 综述 Dijkstra算法(迪杰斯特拉算法)主要是用于求解有向图中单源最短路径问题.其本质是基于贪心策略的(具体见下文).其基本原理如下: (1)初始化:集合vertex_set初始为{sourc ...

  6. 最短路径之迪杰斯特拉算法(Java)

    1)Dijkstra算法适用于求图中两节点之间最短路径 2)Dijkstra算法设计比较巧妙的是:在求源节点到终结点自底向上的过程中,源节点到某一节点之间最短路径的确定上(这也是我之前苦于没有解决的地 ...

  7. 迪杰斯特拉(dijkstra)算法的简要理解和c语言实现(源码)

    迪杰斯特拉(dijkstra)算法:求最短路径的算法,数据结构课程中学习的内容. 1 . 理解 算法思想::设G=(V,E)是一个带权有向图,把图中顶点集合V分成两组,第一组为已求出最短路径的顶点集合 ...

  8. 最短路径之迪杰斯特拉(Dijkstra)算法

    对于网图来说,最短路径,是指两顶点之间经过的边上权值之和最少的路径,并且我们称路径上的第一个顶点为源点,最后一个顶点为终点.最短路径的算法主要有迪杰斯特拉(Dijkstra)算法和弗洛伊德(Floyd ...

  9. JS实现最短路径之迪杰斯特拉(Dijkstra)算法

    最短路径: 对于网图来说,最短路径是指两个顶点之间经过的边上权值和最少的路径,我们称第一个顶点是源点,最后一个顶点是终点 迪杰斯特拉 ( Dijkstra) 算法是并不是一下子就求出 了 Vo 到V8 ...

随机推荐

  1. Codeforces Round #286 (Div. 2)B. Mr. Kitayuta's Colorful Graph(dfs,暴力)

    数据规模小,所以就暴力枚举每一种颜色的边就行了. #include<iostream> #include<cstdio> #include<cstdlib> #in ...

  2. spark 稠密向量和稀疏向量

    Spark mlib的本地向量有两种: DenseVctor   :稠密向量   其创建方式   Vector.dense(数据) SparseVector :稀疏向量   其创建方式有两种: 方法一 ...

  3. msyql中myism和innodb的区别

    MyISAM存储引擎 MyISAM是 默认存储引擎.它基于更老的ISAM代码,但有很多有用的扩展.MyISAM存储引擎的一些特征: ●所有数据值先存储低字节.这使得数据机和操作系统分离.二进制轻便性的 ...

  4. QQ帐户的申请与登陆(25 分)

    实现QQ新帐户申请和老帐户登陆的简化版功能.最大挑战是:据说现在的QQ号码已经有10位数了. 输入格式: 输入首先给出一个正整数N(≤),随后给出N行指令.每行指令的格式为:“命令符(空格)QQ号码( ...

  5. C#关闭一个窗口的同时打开另一个窗口

    在.net的WinForm程序中,如果是直接起动的Form作为主窗口,那么这个主窗口是不能关闭的,因为它维护了一个Windows消息循环,它一旦关闭了就等于声明整个应用程序结束,所以新打开的窗口也就被 ...

  6. rabbitmq -- networking

    RabbitMQ大名鼎鼎, 其networking 部分经常被众多Erlang 程序员, 爱好者分析. 小的时候就见到很多人写过这方面的blog, 比如: 1, http://www.blogjava ...

  7. JSF在ui:include中传递参数到对应控制层

    在JSF中使用ui:include方法可以引入一个页面到当前页面中,如果要向被包含的页面中传入参数,可以使用ui:param标签,这个标签类似于f:param,只不过一个用于页面,一个用于实际标签.示 ...

  8. Java基础--ThreadLocal

    Java中的ThreadLocal 可以看做以线程标识为key的Map,在多线程开发中使用非常方便. 示例 class ThreadEnv { // 用匿名内部类覆盖ThreadLocal的initi ...

  9. 使用Spring Boot 和Spring Data JPA访问mysql数据库

    在Spring中使用JdbcTemplate是一种基本的数据访问方式,但是仍然需要较多的代码,为了解决这些大量枯燥的数据操作语句,我们可以使用ORM框架,比如:Hibernate,通过整合Hibern ...

  10. Mingw版QtCreator调用VS编译的C++库的方法

    https://wenku.baidu.com/view/ae3667fe0b1c59eef8c7b4bc.html