目录 1 问题描述 2 解决方案 2.1 使用Dijkstra算法得到最短距离示例 2.2 具体编码   1 问题描述 何为Dijkstra算法? Dijkstra算法功能:给出加权连通图中一个顶点,称之为起点,找出起点到其它所有顶点之间的最短距离. Dijkstra算法思想:采用贪心法思想,进行n-1次查找(PS:n为加权连通图的顶点总个数,除去起点,则剩下n-1个顶点),第一次进行查找,找出距离起点最近的一个顶点,标记为已遍历:下一次进行查找时,从未被遍历中的顶点寻找距离起点最近的一个顶点,…
目录 1 问题描述 2 解决方案   1 问题描述 串的处理在实际的开发工作中,对字符串的处理是最常见的编程任务.本题目即是要求程序对用户输入的串进行处理.具体规则如下:1. 把每个单词的首字母变为大写.2. 把数字与字母之间用下划线字符(_)分开,使得更清晰3. 把单词中间有多个空格的调整为1个空格. 例如:用户输入:you and me what cpp2005program则程序输出:You And Me What Cpp_2005_program 用户输入:this is a 99cat…
目录 1 问题描述 2 解决方案 2.1 具体编码   1 问题描述 何为spfa(Shortest Path Faster Algorithm)算法? spfa算法功能:给定一个加权连通图,选取一个顶点,称为起点,求取起点到其它所有顶点之间的最短距离,其显著特点是可以求含负权图的单源最短路径,且效率较高.(PS:引用自百度百科:spfa是求单源最短路径的一种算法,它还有一个重要的功能是判负环(在差分约束系统中会得以体现),在Bellman-ford算法的基础上加上一个队列优化,减少了冗余的松弛…
数据结构与算法--最短路径之Dijkstra算法 加权图中,我们很可能关心这样一个问题:从一个顶点到另一个顶点成本最小的路径.比如从成都到北京,途中还有好多城市,如何规划路线,能使总路程最小:或者我们看重的是路费,那么如何选择经过的城市可以使得总路费降到最低? 首先路径是有向的,最短路径需要考虑到各条边的方向. 权值不一定就是指距离,还可以是费用等等... 最短路径的定义:在一幅有向加权图中,从顶点s到顶点t的最短路径是所有从s到t的路径中权值最小者. 为此,我们先要定义有向边以及有向图. 加权…
原文:算法起步之Dijkstra算法 友情提示:转载请注明出处[作者 idlear    博客:http://blog.csdn.net/idlear/article/details/19687579] Dijkstra算法是解决带权重有向图上的单源最短路径问题,必须路径值都为正数.如果实现方式合适的话,他的运行时间要低于我们之前介绍的Bellman-Ford算法的运行时间.如果介绍Dijkstra算法的过程你会发现他其实跟我们直接介绍的prim算法非常的相似.他们都是维护一个最小优先队列,最小…
本文是<算法笔记>KMP算法章节的阅读笔记,文中主要内容来源于<算法笔记>.本文主要介绍了next数组.KMP算法及其应用以及对KMP算法的优化. KMP算法主要用于解决字符串的匹配问题.即给定两个字符串text与pattern,需要判断pattern是否是text的子串.假设text的长度为n,pattern的长度为m,那么用暴力搜索的算法解决该问题需要的时间复杂度为O(m*n).这种算法在m,n大于105级别是无法被接受.而KMP算法需要的时间复杂度仅为O(m+n).Knuth…
Dijkstra算法 Dijkstra算法主要特点是以起始点为中心向外层层扩展,直到扩展到终点为止. 注意该算法要求图中不存在负权边. 首先我们来定义一个二维数组Edge[MAXN][MAXN]来存储图的信息. 这个图的Edge数组初始化以后为 我们还需要用一个一维数组dis来存储1号顶点到其余各个顶点的初始路程,如下. 这个dis数组中存的是最短路的估计值. 通过Dijkstra算法来松弛后,dis存的为从初始点到各点的精确值(最短路径)了. Dijkstra算法实现如下(以HDU1548为例…
简单介绍java Enumeration 分类: java技术备份 java数据结构objectstringclass存储 Enumeration接口  Enumeration接口本身不是一个数据结构.但是,对其他数据结构非常重要. Enumeration接口定义了从一个数据结构得到连续数据的手段.例如,Enumeration定义了一个名为nextElement的方法,可以用来从含有多个元素的数据结构中得到的下一个元素.  Enumeration接口提供了一套标准的方法,由于Enumeratio…
目录 1 问题描述 2 解决方案 2.1 贪心法   1 问题描述 何为Prim算法? 此处引用网友博客中一段介绍(PS:个人感觉网友的这篇博客对于Prim算法讲解的很清楚,本文与之相区别的地方在于具体实现代码的不同,该网友是使用C++实现,而本文是使用Java实现.其他理论讲解可以参考该网友的博客哦,具体链接看文末参考资料) 普里姆算法(Prim算法),图论中的一种算法,可在加权连通图里搜索最小生成树.意即由此算法搜索到的边子集所构成的树中,不但包括了连通图里的所有顶点(英语:Vertex (…
目录 1 问题描述 2 解决方案 2.1 构造最小生成树示例 2.2 伪码及时间效率分析 2.3 具体编码(最佳时间效率)   1 问题描述 何为Kruskal算法? 该算法功能:求取加权连通图的最小生成树.假设加权连通图有n个顶点,那么其最小生成树有且仅有n - 1条边. 该算法核心思想:从给定加权连通图中,选择当前未被选择的,不能形成回路且权值最小的边,加入到当前正在构造的最小生成树中. 2 解决方案 2.1 构造最小生成树示例 下面请看一个具体示例: 给定一个条边,按照从小到大排序依次为:…