摘要:
何为最短路径 最短路径问题是图论研究中的一个经典算法问题,旨在寻找图(由结点和路径组成的)中两结点之间的最短路径,大致可以分为如下几种问题,可无论如何分类问题,其本质思想还是不变的,即,求两点间的最短距离。 a) 确定起点的最短路径问题 - 即已知起始结点,求最短路径的问题。 b) 确定终点的最短路 阅读全文
摘要:
哈夫曼树 简介 哈夫曼树(Huffman Tree),又名:最优二叉树,赫夫曼树 其标准含义是:给定N个权值作为N个叶子结点,构造一棵二叉树,若该树的带权路径长度达到最小,称这样的二叉树为最优二叉树,也称为哈夫曼树。哈夫曼树是带权路径长度最短的树,权值较大的结点离根较近。 相关名词 由于本篇存在一定 阅读全文
摘要:
树与森林 1. 什么是森林 森林,顾名思义,就是由众多的树构成的一组数据结构,这些树本身没有什么联系,用系统的语言描述就是:森林:m(>=0)棵互不相交的树的集合 【注意这里森林是可以有0颗树的,同数学上的空集】 如果把一棵树当作一个独立的点,那么森林就是一个点的集合。 2. 树转换成二叉树 操作过 阅读全文
摘要:
克鲁斯卡尔算法(Kruskal算法)求最小生成树 克鲁斯卡尔算法简介 克鲁斯卡尔算法是一种用来寻找最小生成树的算法(用来求加权连通图的最小生成树的算法)。在剩下的所有未选取的边中,找最小边,如果和已选取的边构成回路,则放弃,选取次小边。 而具体的操作过程为: a) 将图的所有连接线去掉,只剩顶点 b 阅读全文
摘要:
平衡二叉树详解 简介 平衡二叉树(Balanced Binary Tree)具有以下性质:它是一棵空树或它的左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉树。平衡二叉树的常用实现方法有红黑树、AVL、替罪羊树、Treap、伸展树等。 其中最为经典当属AVL树,我们 总计而言就 阅读全文
摘要:
题目描述 某市调查城镇交通状况,得到现有城镇道路统计表。表中列出了每条道路直接连通的城镇。市政府 "村村通工程" 的目标是使全市任何两个城镇间都可以实现交通(但不一定有直接的道路相连,只要相互之间可达即可)。请你计算出最少还需要建设多少条道路? 输入格式 输入包含若干组测试测试数据,每组测试数据的第 阅读全文
摘要:
P1551 亲戚 题目背景 若某个家族人员过于庞大,要判断两个是否是亲戚,确实还很不容易,现在给出某个亲戚关系图,求任意给出的两个人是否具有亲戚关系。 题目描述 规定:x和y是亲戚,y和z是亲戚,那么x和z也是亲戚。如果x,y是亲戚,那么x的亲戚都是y的亲戚,y的亲戚也都是x的亲戚。 输入格式 第一 阅读全文
摘要:
并查集 并查集是数据结构中的一个重要算法,可以管理元素分组,并查集由三部分构成:初始化,找父节点,合并结点,直接来看并查集的模板: const int max_size=1000; int pre[max_size]; void init_set(int count){ for (int i = 1 阅读全文
摘要:
并查集 一、关于并查集 1. 定义 并查集(Disjoint-Set)是一种可以动态维护若干个不重叠的集合,并支持合并与查询两种操作的一种数据结构。 2. 基本操作 1. 合并(Union/Merge):合并两个集合。2. 查询(Find/Get):查询元素所属集合。实际操作时,我们会使用一个点来代 阅读全文
摘要:
栈数组 #include<stdio.h> #include<stdlib.h> #include<string.h> #define maxn 10000 //结点设计 typedef struct stack{ int data[maxn]; int top; }stack; //创建 stac 阅读全文