摘要: 要知道单源最短路径的的两种算法--bellman-ford算法以及dijkstra算法之前,首先我们要来了解一种技术:松弛技术。所谓的松弛技术,实际上用一串代码即可解释: RELAX(u,v,w) if d(v)> d(u) + w(v,u) then d(v) <---- d(u)+w(v,u) pai(v)<----u这就是所谓的松弛一条边(u,v)的过程。意思就是:我们想要找到v的最短路径,那么我们这时候已经知道了到u的最短路径,那么利用u的最短路径+(u,v)的长度, 看这个长度是否比当前v上标明的,到v的最短路径还要短。如果是的话,就把最短的值给d(v),v的父.. 阅读全文
posted @ 2013-05-10 15:11 kamendula 阅读(153) 评论(0) 推荐(0) 编辑
摘要: Given an unsorted array of integers, find the length of the longest consecutive elements sequence.For example,Given[100, 4, 200, 1, 3, 2],The longest consecutive elements sequence is[1, 2, 3, 4]. Return its length:4.Your algorithm should run in O(n) complexity.这道题貌似在陈利人的微博上看到过,当时是有思路的:即采用hash的方法。但是再 阅读全文
posted @ 2013-05-05 20:42 kamendula 阅读(219) 评论(0) 推荐(0) 编辑
摘要: Given a binary tree containing digits from 0-9 only, each root-to-leaf path could represent a number.An example is the root-to-leaf path 1->2->3 which represents the number 123.Find the total sum of all root-to-leaf numbers.For example, 1 / \ 2 3The root-to-leaf path 1->2 represents the num 阅读全文
posted @ 2013-05-03 21:52 kamendula 阅读(175) 评论(0) 推荐(0) 编辑
摘要: Given a 2D board containing 'X' and 'O', capture all regions surrounded by 'X'.A region is captured by flipping all 'O's into 'X's in that surrounded region .For example,X X X XX O O XX X O XX O X XAfter running your function, the board should be:X X X XX X X 阅读全文
posted @ 2013-05-03 21:19 kamendula 阅读(142) 评论(0) 推荐(0) 编辑
摘要: Given a string s, partition s such that every substring of the partition is a palindrome.Return all possible palindrome partitioning of s.For example, given s = "aab", Return [ ["aa","b"], ["a","a","b"] ]不太清楚。网上说是用dfs来做,但是可能因为自己水平不够,不明白如何算是 阅读全文
posted @ 2013-05-03 20:45 kamendula 阅读(189) 评论(0) 推荐(0) 编辑
摘要: 首先,一个图包含的元素主要有: 顶点数目,顶点值,弧的数目,弧的值(一般由两个顶点来确定),当然你也可以加入这个图的信息,比如,是有向图,还是无向图。一般的,可以如下定义:typedef int VRType;typedef char InfoType;typedef char VertexType[MAX_NAME];#define INFINITY INT_MAX /* 用整型最大值代替∞ */#define MAX_VERTEX_NUM 20 /* 最大顶点个数 */typedef enum{DG,DN,AG,AN}GraphKind; /* {有向图,有向网,无向图,无向网} */ t 阅读全文
posted @ 2013-04-12 16:30 kamendula 阅读(723) 评论(0) 推荐(0) 编辑
摘要: 图的元素有这么几点:顶点数目,顶点信息,弧的数目,弧的信息,以及图的信息。在矩阵表示的时候,弧是较为容易确定的------两个顶点之间,也就是一个二维指针指向的是0还是不是0,或者是无穷大还是有值,通过这些来判断弧的存在。但是在邻接表中,就要用链表的特征:采用指针将图表示出来。 在邻接表中,要对途中的每一个顶点建立一个单链表。在严版的《数据结构》中,对于每个结点是这么定义的: 里面包含三部分的信息: 包括与顶点邻接的点在图中的位置,下一条弧的结点,以及包括弧的信息,包括弧的权值等信息。 于是她定义了这样的一个数据结构:<span style="font-family:SimHe 阅读全文
posted @ 2013-04-12 16:28 kamendula 阅读(541) 评论(0) 推荐(0) 编辑
摘要: 图的遍历主要分为两种形式:广度优先遍历(BFS) 和深度优先遍历(DFS)。对于图的遍历来说,不管是采用的邻接矩阵的方式,还是采用的邻接表的形式,其实现都是类似的,甚至可以说是一样的。广度遍历广度遍历利用了队列的特点,结点顺序的放入队列中,然后再出来。对于采用邻接表还是邻接矩阵,两者实际上是非常类似的:void BFSTraverse(MGraph G,Status(*Visit)(VertexType)){ /* 初始条件: 图G存在,Visit是顶点的应用函数。*/ /* 操作结果: 从第1个顶点起,按广度优先非递归遍历图G,并对每个顶点调用函数 */ /* Vis... 阅读全文
posted @ 2013-04-12 16:23 kamendula 阅读(403) 评论(0) 推荐(0) 编辑
摘要: 最小生成树实际上指的是“最小权值生成树“生成树是连通图的极小连通子图。所谓极小是指:若在树中任意增加一条边,则将出现一个回路;若去掉一条边,将会使之变成非连通图。 生成树各边的权值总和称为生成树的权。权最小的生成树称为最小生成树。最小生成树的性质用哲学的观点来说,每个事物都有自己特有的性质,那么图的最小生成树也是不例外的。按照生成树的定义,n 个顶点的连通网络的生成树有 n 个顶点、n-1 条边。最小生成树的寻找方法主要有两个方法:Kruscal算法:http://www.cnblogs.com/ktyanny/archive/2009/12/10/1621034.htmlprim算法:htt 阅读全文
posted @ 2013-03-30 17:17 kamendula 阅读(301) 评论(0) 推荐(0) 编辑
摘要: (转自 http://www.cnblogs.com/ZJUKasuosuo/archive/2012/07/12/2587889.html)1. 拓扑排序主要有两种算法:方法1:《算法导论》上给出的DFS+时间戳;方法2:求顶点入度+贪心算法。2. 两种算法的代码分别如下:View Code static int f[100]={0}; static int ftime=0; //递归深度优先搜索 template<typename vertexNametype, typename weight> void ALGraph<vertexNametype, weight> 阅读全文
posted @ 2013-03-30 15:57 kamendula 阅读(622) 评论(0) 推荐(0) 编辑