上一页 1 ··· 5 6 7 8 9 10 11 下一页
摘要: 1、Bellman-Ford算法该算法能解决单源最短路径问题,即使存在负权边的情况下。运行Bellman-Ford算法可以返回一个布尔值,如果为true,则说明图中不包含从源点可达的负权回路,算法将产生最短路径及其权值;如果为false,则说明图中包含从源点可达的负权回路,该问题无解。View Code 1 int d[50]; 2 int p[50]; 3 4 //initialize each distance of vertex to source, first source can't be reached 5 //p is the parent of vertex 6 voi 阅读全文
posted @ 2012-03-13 08:58 Cavia 阅读(776) 评论(0) 推荐(0) 编辑
摘要: 有以下多种容器:1、数组(array)2、动态数组(dynamic array)3、链表(linked list)4、栈(stack)5、队列(queue)6、双向队列(deque)7、优先级队列(priority queue)8、树(tree)9、二叉查找树(binary search tree)10、二叉堆(binary heap)11、字典(dictionary)12、集合(set)13、图(graph)14、有向无环图(directed acyclic graph)容器操作:1、插入(insert)2、移除(remove)3、顺序遍历(sequential access)4、随机遍历( 阅读全文
posted @ 2012-02-28 23:34 Cavia 阅读(195) 评论(0) 推荐(0) 编辑
摘要: 动态内存分配速度很慢。影响因素有二:1、堆分配需要处理任何大小的分配,所以管理支出较大;2、大多数OS中调用malloc()和free()必须首先从用户模式切换到内核模式,处理完后再切换回来。所以需要自己定制的内存分配器!一、Stack-Based Allocators1、分配大段连续的内存块(malloc() or new or array)2、维护一个指向栈顶的指针。初始化指针指向内存最低地址处。运行过程中,内存地址低于栈顶的都是正在使用的内存块,内存地址高于栈顶的都是未被使用的内存块。3、每次分配只需要将指针往内存高地址处移动;每次施放内存只需要将指针往内存低地址处移动。4、需要一个标记 阅读全文
posted @ 2012-02-28 19:28 Cavia 阅读(396) 评论(0) 推荐(0) 编辑
摘要: 错误的方式一wrong solution1 1 class RenderManager 2 { 3 public: 4 RenderManager() 5 { 6 //start up the manager... 7 } 8 ~RenderManager() 9 {10 //shut down the manager... 11 }12 //...13 };14 15 //singleton instance16 static RenderManager gRenderManage... 阅读全文
posted @ 2012-02-28 09:09 Cavia 阅读(430) 评论(0) 推荐(0) 编辑
摘要: 使用贪心策略,伪代码如下mst1 GENERIC-MST(G,w)2 A=空集3 while(A不形成生成树)4 找到一条安全边5 将此边添加到A中去6 return A在Kruskal算法中,集合A是一个森林,加入集合A中的安全边总是图中连接两个不同连通分支的最小权边。在Prim算法中,集合A仅形成单棵树,添加入集合A的安全边总是连接树与一个不在树中得顶点的最小权边。info 1 typedef struct Edge 2 { 3 int adj_vertex; 4 int weigh... 阅读全文
posted @ 2012-02-21 21:21 Cavia 阅读(298) 评论(0) 推荐(0) 编辑
摘要: 思路:a、对图进行深度优先搜索b、求图的转置c、按照a中求得的finish time从大到小排列,按此顺序对转置图进行深度优先搜索d、得到的深度优先森林即为图的强连通分支 阅读全文
posted @ 2012-02-21 20:53 Cavia 阅读(196) 评论(0) 推荐(0) 编辑
摘要: 两种思路一a、找到图中入度为零的顶点,并输出b、删除该顶点,并修改其他顶点的入度c、如果还有入度为零的顶点,则转a,否则输出二a、进行深度优先搜索b、按finish time反序排列,即为拓扑序列solution1 1 int Is_ZeroDegree(int* a,int n) 2 { 3 for(int i=0;i<n;++i) 4 if(a[i]==0) 5 return i; 6 return n; 7 } 8 9 void Topo_Sort1(const Graph* g)10 {11 int indegree[5... 阅读全文
posted @ 2012-02-21 15:39 Cavia 阅读(202) 评论(0) 推荐(0) 编辑
摘要: dfs nonrecursion 1 int _visited[50]; 2 void DFS_Norecursion(const Graph* g) 3 { 4 for(int i=0;i<g->v;++i) 5 { 6 _visited[i]=0; 7 p_dfs[i]=0; 8 } 9 int pp=0;10 for(int i=0;i<g->v;++i)11 {12 int m=i;13 while(!s.empty() || _visited[m]==0)14 ... 阅读全文
posted @ 2012-02-21 10:14 Cavia 阅读(222) 评论(0) 推荐(0) 编辑
摘要: 二项树Bk是一种递归定义的有序树,B0只包含一个结点,Bk由两颗Bk-1连接而成,其中一棵树的根是另一颗树的根的最左孩子。二项树Bk的性质:a、共有2k个结点b、树的高度为kc、在深度i处恰有Cki个结点,其中i=0,1,...,kd、根的度数为k,大于任何其他结点的度数,并且如果根的子女从左到右编号为k-1,k-2,...,0,子女i是子树Bi的根二项堆H由一组满足下列性质的二项树组成:a、H中的每个二项树遵循最小堆性质:结点的关键字大于等于其父结点的关键字b、对任意非负整数k,在H中至多有一颗二项树的根具有度数k在包含n个结点的二项堆H中,将n表示成二进制形式(有lgn+1位),当第i位为 阅读全文
posted @ 2012-02-17 13:04 Cavia 阅读(3003) 评论(0) 推荐(0) 编辑
摘要: 定义:(1)每个结点有以下域:a、n(x):当前存储在结点x中的关键字数b、n(x)个关键字本身,以非降序存放,因此key(x)[1]<=key(x)[2]<=...<=key(x)[n(x)]c、leaf(x),是个布尔值,如果x是叶子的话,则他为true,如果x为一个内结点,则为false(2)每个内结点x还包含n(x)+1个指向其子女的指针c(x)[1],c(x)[2],...,c(x)[n(x)+1],叶结点没有子女,故他们的c域无定义(3)各关键字key(x)[i]对存储在各子树中的关键字范围加以分隔,如果k[i]为存储在c(x)[i]为根的子树中的关键字,则k[1 阅读全文
posted @ 2012-02-16 22:03 Cavia 阅读(378) 评论(0) 推荐(0) 编辑
上一页 1 ··· 5 6 7 8 9 10 11 下一页