自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(14)
  • 收藏
  • 关注

原创 拓扑排序和关键路径计算

拓扑排序所谓拓扑排序,就是用有向无环图(Directed Acyclic Graph,DAG)构成的有序序列。设图中一顶点Vi到另一顶点Vj存在一条路径,那么Vj在此图的拓扑排序序列中位于Vi之后。实现拓扑排序的思想如下,先找到任何一个入度为0的顶点,输出该顶点,并从图中删除该顶点以及与其相关联的所有边。对改变后的图重复这一过程,直到所有的顶点输出为止。拓扑排序算法的伪代码:bool TopSort(Graph Graph,Vertex TopOrder[]){//对Graph进行拓扑排序,Top

2021-06-21 16:43:39 405

原创 最短路径之单源最短路径

最短路径(Shortest Path)问题:在网图中,求两个不同顶点的所有路径中,边的权值之和最短的那一条路径。路径上的第一个顶点称为源点,最后一个顶点称为终点。在非网图中,最短路径是指两点之间经历的边数最少的路径。单源最短路径所谓“单源最短路径问题”,是指给定一个带权有向图G和源点V0,求从V0到其他各顶点的最短路径。Dijkstra算法是,按距离递增的顺序逐步找出V0到各个顶点的最短距离的过程,完全类似于Prim算法求最小生成树。设置两个数组dist[ ]和path[ ],分别存储V0到其余顶

2021-06-20 10:58:28 962

原创 最小生成树

以下内容来自陈越姥姥《数据结构(第2版)》,笔记仅供自己参考。最小生成树(Minimum Spanning Tree,MST):如果无向连通图是一个网图,它的所有生成树中必有一棵边的权值总和最小的生成树。对于任意的一个带权的连通网图来说,最小生成树不一定唯一。Prim算法Prim算法的思想就是Grow a Tree,从任何一个顶点出发,构建过程从初始只有这个顶点的“当前树”开始,不断加入边和相关顶点到“当前树”中,使得树不断生长。每次选择一个最好的顶点,所谓最好的顶点,就是到当前树的距离最小的顶点,经

2021-06-18 13:52:16 266

原创 图的遍历。

图的遍历:从图中的任意顶点出发,对图中的所有顶点访问一次且只访问一次的次序序列。深度优先搜索深度优先搜索(Depth First Search)类似于树的先序遍历,共同的思想为,先访问根节点(当然图里面好像没有根节点这个说法),再去递归地访问根节点的所有邻接点。核心还是递归,只不过由于图更加复杂,所以需要一个访问标志数组Visited[ ],来记录哪些顶点被访问过。按照陈越姥姥的说法,深度优先搜索是从图中的某个顶点V0出发,访问此顶点,然后依次从V0的未被访问的邻接点出发递归进行同样的深度优先搜索,直

2021-06-17 15:17:40 122

原创 图的存储结构

图的抽象数据类型类型名称:图(Graph)数据对象集:一非空的顶点集合Vertex和一个边集合Edge,以及任一访问顶点的函数Visit()。操作集:Graph CreateGraph(int VertexNum):构造一个有VertexNum个顶点但是没有边的图;void InsertEdge(Graph G,Edge E):插入边E;void DeleteEdge(Graph G,Edge E):删除边E;bool IsEmpty(Graph G):如果图G为空,返回true;否则,

2021-06-17 08:21:21 181

原创 散列查找-处理冲突的办法

以下内容来自陈越姥姥《数据结构(第2版)》,笔记仅供自己参考。开放定址法所谓开放定址法,就是一旦产生冲突,即该地址已经存放了其他元素时,就去寻找另一个空的散列地址。在没有装满的散列表中,空的散列地址总能找到。懒惰删除:增加1个“删除标记”,而并不是真正删除它。因为查找操作时,找到空地址代表查找失败,但事实上,也许是散列到这里的数据对象已经绕过这里存在了别处。一般来说,发生了第i次冲突,我们试探的下一个地址将增加di。即h1(key)=(h(key) + di) mod TableSize。根据d

2021-06-14 10:45:26 653

转载 C++容器(SRTL容器)

容器(container)用于存放数据的类模板。可变长数组、链表、平衡二叉树等数据结构在STL中都被实现为容器。类模板:对一批仅仅是成员数据类型不同的类的抽象。一个类模板可以用来生成多种具体的类(类模板的实例)。使用容器时,即将容器类模板实例化为容器类时,需要指明容器中存放的元素是什么类型的。容器中可以存放基本类型的变量,也可以存放对象。对象或基本类型的变量被插入容器中时,实际插入的是对象或变量的一个复制品。STL中的许多算法,如排序、查找等算法,在执行过程中会对容器中的元素进行比较。这些算法通

2021-06-13 17:28:25 270

原创 用一个数组实现两个堆栈

题干请用一个数组实现两个堆栈,要求最大可能地利用数组空间,使数组只要有空间、入栈操作就能成功。写出相应的入栈和出栈操作函数。分析第一种方案,是将数组空间一分为二地分配给两个堆栈使用,一个堆栈的底在数组的起始位置,另一个在数组的中间位置,两个栈顶指针Top都沿着同一个方向增长。若其中一个堆栈先满了,而另一个堆栈还有空,我们可以顺序移动数据,为满的那个堆栈腾出空位来。但是这种方法,可能涉及很多数据的移位,比较麻烦。第二种方案,是使两个栈分别从数组的两头开始、向中间生长,当两个栈顶指针相遇时,代表两个栈

2021-05-23 23:07:02 2260

原创 1002 写出这个数

读入一个正整数 n,计算其各位数字之和,用汉语拼音写出和的每一位数字。输入格式:每个测试输入包含 1 个测试用例,即给出自然数 n 的值。这里保证 n 小于 10​100​​。输出格式:在一行内输出 n 的各位数字之和的每一位,拼音数字间有 1 空格,但一行中最后一个拼音数字后没有空格。输入样例:1234567890987654321123456789输出样例:yi san wu我的错误思路输入的n,直接用int型变量来存储。事实上,n<=10^100,long long int

2021-05-16 12:01:14 42

原创 整数分解

逆序分解储备知识x % 10:得到x的个位数x / 10:舍去x的个位数法一:700逆序分解后是7while ( x > 0 ) { digit = x % 10 ; /*digit是x的个位数*/ ret =ret * 10 + digit ; /*ret是整数逆序的结果*/ x / = 10 ;}法二:700逆序分解后是007while ( x > 0 ) { digit = x % 10; printf ( "%d", digit ); x / = 10;

2021-05-16 11:35:56 130

原创 素数打表法

定义法素数的定义:只能被1和本身整除的数。适用范围:适合判断单个数是否为素数若是求一个大范围内的所有素数,此方法耗时太长代码:/*判断n是否为素数*/for(i=2;i*i<=n;i++) { if(n%i==0) { flag=0;/*flag=0代表n不是素数*/ break; }}普通筛选法/埃氏筛法思想:首先假定所求范围内的所有数都是素数,然后去除该范围内的所有合数,剩下的全是素数。任何合数均可表示为素数的倍数。因此,如果已知一个数是素数,那么

2021-05-02 09:59:44 140

原创 符号常量与常变量

符号常量概念:用#define指令,指定一个符号名称代表一个常量/字符串。#define PI 3.1416 /*注意行末没有分号*/好处:含义清楚:定义符号常量名时,要考虑“见名知意”。一改全改:需要改变程序中多处用到的同一常量时。注意:习惯上,符号常量用大写表示。如PI、PRICE。定义符号常量使用#define指令(预编译指令),在预编译时只是进行字符替换,预编译后,符号常量就不存在了。对符号常量的名字,不分配存储单元。常变量C99允许使用常变量。const i

2021-05-01 12:12:05 646

原创 逻辑型变量 _Bool 和bool

逻辑型变量是C99新增的一种数据类型。定义逻辑型变量用类型符_Bool。在头文件==#include <stdbool.h>==中,将bool定义为_Bool的同义词,同时定义了两个符号常量true(代表1)和false(代表0)。因此,使用#include <stdbool.h>后,也可以用bool来定义逻辑型变量。bool和_Bool型变量都占1个字节。...

2021-05-01 11:50:41 889

原创 XTU 1293 Diamond

思路像这种,需要用几重循环来输出一个字符图形的题目,解题关键是,通过观察样例、找到输出图形的规律。对于这道题,先观察n=3时的字符钻石,很明显,上下、左右都是对称的,那么我们可以只寻找第1-3行的规律。当循环需要输出第4-5行时,可以根据对称性输出。第1-3行又包括三部分,从左到右依次是:输出空格的部分、输出字母的部分、输出换行符的部分。接下来就去找这三种输出情况,所对应的i、j、n之间的关系。由于第2点有说,这个字符钻石关于左右也是对称的。那么为什么不直接考虑左上角的部分呢?因为左边的空白区域需

2021-04-29 22:41:54 257 1

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除