先附上Djikstra的代码:普通版 const int maxn=101; const int INF=0x3f3f3f3f; int edges[maxn][maxn]; int dist[maxn]; void dijkstra(int s,int n){ bool done[maxn]; memset(done,0,sizeof(done)); done[s]=true; for(int i=0;i<n;i++) dist[i]=edges[s][i]; for(int i=0,min,…
数据结构与算法分析--C语言描述 第三章的单链表 很基础的东西.走一遍流程.有人说学编程最简单最笨的方法就是把书上的代码敲一遍.这个我是头文件是照抄的..c源文件自己实现. list.h typedef int ElementType; #ifndef _List_H #define _List_H struct Node; typedef struct Node *PtrToNode; typedef PtrToNode List; typedef PtrToNode Position; Li…
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2544 题目分析:比较简单的最短路算法应用.题目告知起点与终点的位置,以及各路口之间路径到达所需的时间,要求输出起点到终点的最短时间. /* 最短路 Time Limit: 5000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 35043 Accepted Submission…
图论中一个经典问题就是求最短路.最为基础和最为经典的算法莫过于 Dijkstra 和 Floyd 算法,一个是贪心算法,一个是动态规划.这也是算法中的两大经典代表.用一个简单图在纸上一步一步演算,也是非常好理解的.理解透自己多默写几次就可以记住,机试时基本的工作往往就是高速构造邻接矩阵了. 对于平时的练习,一个非常厉害的 ACMer  @BenLin_BLY 说:"刷水题能够加快我们编程的速度,做经典则能够让我们触类旁通,初期假设遇见非常多编不出.最好还是就写伪代码,理思路.在纸上进行总体分析和…
现在我们将要叙述四个算法来求解早先提出的最大子序列和问题. 第一个算法,它只是穷举式地尝试所有的可能.for循环中的循环变量反映了Java中数组从0开始而不是从1开始这样一个事实.还有,本算法并不计算实际的子序列:实际的计算还要添加一些额外的代码. public static int maxSubSum1(int[] a) { int maxSum = 0; for(int i = 0;i<a.length;i++) for(int j = i;j<a.length;j++) { int th…
有几种方法估计一个程序的运行时间.前面的表是凭经验得到的(可以参考:<数据结构与算法分析>读书笔记--要分析的问题) 如果认为两个程序花费大致相同的时间,要确定哪个程序更快的最好方法很可能将它们编码并运行. 一般地,存在几种算法思想,而我们总愿意尽早除去那些不好的算法思想,因此,通常需要分析算法.不仅如此,进行分析的能力常常提供对于设计有效算法的洞察能力.一般说来,分析还能准确地确定瓶颈,这些地方值得仔细编码. 为了简化分析,我们将采纳如下的约定:不存在特定的时间单位.因此,我们抛弃一些前导的…
数学知识复习是<数据结构与算法分析>的第一章引论的第二小节,之所以放在后面,是因为我对数学确实有些恐惧感.不过再怎么恐惧也是要面对的. 一.指数 基本公式: 二.对数 在计算机科学中除非有特别的声明,否则所有的对数都是以2为底的. 定义:XA=B 当且仅当logxB=A. 由该定义可以推出几个方便的等式. 定理1: logaB=logcB/logcA; A,B,C>0,A不等于1 定理2: logAB=logA+logB:A,B大于0 三.级数 最容易记忆的公式: 四.模运算 如果N整除…
最简单的不相交集的实现,来自MAW的<数据结构与算法分析>. 代码: class DisjSet: def __init__(self, NumSets): self.S = [0 for i in range(NumSets+1)] def SetUnion(self, S, Root1, Root2): S[Root2] = Root1 def Find(self, X, S): if S[X] <= 0: return X else: return self.Find(S[X],…
二叉树的插入与删除,来自Mark Allen Weiss的<数据结构与算法分析>. # Definition for a binary tree node class TreeNode: def __init__(self, x): self.val = x self.left = None self.right = None class BinarySearchTree: # @param root, a tree node # @return a list of integers def…
数据结构与算法--最短路径之Dijkstra算法 加权图中,我们很可能关心这样一个问题:从一个顶点到另一个顶点成本最小的路径.比如从成都到北京,途中还有好多城市,如何规划路线,能使总路程最小:或者我们看重的是路费,那么如何选择经过的城市可以使得总路费降到最低? 首先路径是有向的,最短路径需要考虑到各条边的方向. 权值不一定就是指距离,还可以是费用等等... 最短路径的定义:在一幅有向加权图中,从顶点s到顶点t的最短路径是所有从s到t的路径中权值最小者. 为此,我们先要定义有向边以及有向图. 加权…