自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 08-图8 How Long Does It Take (25分)

08-图8 How Long Does It Take (25分)#include<iostream>#include<queue>#define MaxSize 100#define INFINITY 63225using namespace std;int MGraph[MaxSize][MaxSize];int Dist[MaxSize]={0};int InDegree[MaxSize];int N,M;//N represented the numbe

2020-09-01 22:46:16 152

原创 08-图7 公路村村通 (30分)

08-图7 公路村村通 (30分)#include <iostream>using namespace std;#define INFINITY 63325#define MaxSize 1005#define ERROR -1int Dist[MaxSize];//distance from MST to Nodeint Map[MaxSize][MaxSize];//a matrix which is used to restore city numbers and path

2020-09-01 22:44:27 166

原创 07-图6 旅游规划 (25分)

07-图6 旅游规划 (25分)#include <iostream>#define MaxSize 501#define INFINITY 63325#define ERROR -1using namespace std;typedef struct Node{ int Expense; int Length;} MGraph[MaxSize][MaxSize];MGraph G;int Collected[MaxSize]={0};int Dist[M

2020-09-01 22:43:14 172

原创 07-图4 哈利·波特的考试 (25分)

07-图4 哈利·波特的考试 (25分)解题思路:根据题目的意思就是找任意两个点之间的最短路径,也就是多源最短路径的算法,即Floyd算法(弗洛伊德算法),里面要注意的细节是,因为顶点是从1开始,所以在生成邻接矩阵的时候,我这里采用的是从下标1开始初始化为INFINITY#include<iostream>#define MaxVertexNum 101#define INFINITY 65535using namespace std;//定义图的存储结构-邻接矩阵typedef

2020-08-17 22:23:33 325

原创 06-图3 六度空间 (30分)

06-图3 六度空间 (30分)思路分析:这里主要列举一下自己犯的错误,因为这个题目要求每一个结点都要BFS,所以说每一个结点BFS之前都要将Visited数组初始化为没有访问的状态,我忘记了,所以运行一直是错误。还要注意的是,这里是从1开始的,所以Visited数组存储最好也从1开始。之所以这里选择邻接表的存储方式,是因为由题意得知 N*(N-1)=N*33,N解出来等于67,所以当N越大,M也就越小,所以这是一个 稀疏图,用邻接表的方式最好。代码写得有点零乱…#include<iostr

2020-08-14 20:22:16 212

原创 06-图2 Saving James Bond - Easy Version (25分)

06-图2 Saving James Bond - Easy Version (25分)思路分析:007每跳一次实际上就是在半径为20的圆里面寻找是否有可以连通的点,第一次跳跃很特殊,因为岛的直径是15,所以要第一次跳跃(20+7.5)才是要寻找的范围。每一次跳跃都是相同的距离,我们可以知道 这个过程就像是深度优先搜索的策略,跳到一个点然后一直往深处寻找下一个可以连通的点,找不到,也就是007跳不到岸上,就重新返回上一个结点。DFS是针对连通图的一个遍历,但是这里其实我们假设每一个点都是连通的,但是是否

2020-08-13 17:34:25 164

原创 06-图1 列出连通集 (25分)

06-图1 列出连通集 (25分)解题思路 :由于题目给的是非连通图,所以要考虑到BFS 和 DFS外面还需要嵌套一层循环#include<iostream>#include<queue>using namespace std;typedef struct VNode{ int Nv,Ne; int Data[10][10];}*MGraph;typedef struct ENode{ int V1; int V2;}*Edge;

2020-08-13 15:27:52 791

原创 第六章 图(更新中....)

图不同于树,树是一种具有层次关系的结构,而在图中的任意两个顶点都可能有关系。图(Graph),顶点(Vertex),边(Edge)因此图可以表示为: G=(V,E),每一条边是一顶点对(V,W)。图和线性表,树的比较:1.线性表中的数据叫元素,树中的数据叫结点,图中的数据叫顶点2.线性表中没有元素叫空表,树中没有结点叫空树,图中必须至少有一个顶点,但是边集可以为空图的相关术语:1.无向图(Undirected Graphs)2.有向图(Directed Graphs)3.简单图(Simpl

2020-08-10 22:25:38 132

原创 05-树8 File Transfer (25分)

05-树8 File Transfer (25分)思路分析:本题的意思就是给出一串数字让你检查他们是否有在一个集合,因为计算机是双向连接,所以就相当于是一颗树,将他们并在一起。值得注意的是,我们将这些树存放在数组中,数组的下标就是计算机的序号(也就是节点的值),数组的值就是他对应的父节点。首先我们要进行初始化,将每一个父节点初始化为-1,尽量少使用全局变量,所以这里typedef了一个数组类型然后记得要在主函数中初始化对象。#include <iostream>#define Max

2020-08-09 18:03:35 217

原创 05-树7 堆中的路径 (25分)

05-树7 堆中的路径 (25分)思路分析:题目的意思是输入节点值,要把这个节点构成最小堆,可以采取两个思路,一个是动态插入,也就是插入一个就马上构成一个最小堆,这样的话会用到最小堆的插入算法,也就是每插入一个数先暂时在最后生成一个节点,运用完全二叉树的性质,父亲节点为 (i/2),来比较大小,如果要插入的树小于父节点,那么将父节点移动到新生成的这个节点,我们用数组来实现,每要生成节点,那么这个节点的位置就是这个二叉树的规模。第二个方法就是先按照生成完全二叉树的办法将每一个节点无序放入,然后从最后一个

2020-08-09 16:01:31 279

转载 04-树6 Complete Binary Search Tree (30分)

04-树6 Complete Binary Search Tree (30分)原帖地址:Cnblogs解题思路:这里要用到完全二叉树的性质,即如果有结点数为n的完全二叉树,对任一节点 i (1<=i<=n)都有,如果i=1,则i是二叉树的根,如果i>1,则其双亲是结点[i/2];如果2i>n,则结点i无左孩子,否则其左孩子是结点2i;如果2i+1>n,则结点i无右孩子,否则其右孩子是结点2i+1从给出的样本可以知道,将输入的有序节点进行排序以后,得到了该完全二叉搜索树

2020-08-07 11:18:06 281 2

原创 04-树5 Root of AVL Tree

04-树5 Root of AVL Tree思路分析:这道题思路很清晰,主要就是熟悉二叉平衡树的插入,知道LL,RR,LR,RL旋转的算法就可以解决#include<iostream>using namespace std;typedef struct AVLTNode* AVLTree;struct AVLTNode{ int height; AVLTree left, right; int data;};AVLTree insert(AVLTre

2020-07-29 18:00:57 183 1

原创 04-树4 是否同一棵二叉搜索树 (25分)

04-树4 是否同一棵二叉搜索树 (25分)思路分析:本体整体的思路很明显,先输入二叉搜索树的结点个数,然后输入要比较的二叉搜索树的个数,之后进入循环迭代,首先要构建一个要进行比较的模板二叉树,然后再构建要比较的函数,这里用到了很多函数的方法,值得注意的是C++的实现,必须在main函数之前提供函数的声明。Tree makeNewTree(int n );用来生成二叉搜索树Tree treeNewNode(int v);生成新的结点Tree insert(Tree T, int v);因为是通过用

2020-07-29 16:17:07 472 1

原创 03-树3 Tree Traversals Again (25分)

03-树3 Tree Traversals Again (25分)思路分析:给出的样例就是说如果按照堆栈操作那么,出来的就是这个二叉树的中序遍历的结果,然后push操作的值就是二叉树前序遍历的结果,所以题目的意思就是,已知一个二叉树的中序遍历和前序遍历求得这个二叉树的后序遍历每次在前序遍历中寻找根节点,然后从中序遍历中获取左子树和右子树的个数,然后再构造后序遍历数组,后序遍历数组的最后一位是根节点,然后每一次划分子树以后,那么该序列的最后一位也是 该子树的根, 采用递归逐渐将前序和中序遍历的结果划

2020-07-26 22:27:55 133

原创 03-树2 List Leaves (25分)

03-树2 List Leaves (25分)思路分析:本体要自己创建一个二叉树,然后按照层序输出叶节点,一说到层序我们就会想到层序遍历,层序遍历我们常用的方法无非是队列,从根节点开始进入队列,设置一个临时变量,判断队列是否为空,然后获取队列头元素,然后出栈,并且输入它,判断这个临时变量是否有左右孩子如果有,则依次将左孩子,右孩子进入队列,依次类推反复执行。这道题要用到queue的库函数,就用C++来实现的,queue容器提供了以下的操作:front():返回 queue 中第一个元素的引用。如果

2020-07-25 15:10:52 198

原创 树的同构 (25分)

树的同构 (25分)思路分析:树的同构,顾名思义两个树是否有一样的结构,每一个孩子结点的孩子的数量和值都要相同,但是它所在的位置可以左右交换(不是说两个父亲结点的孩子互相交换,而是说父亲结点的下一层孩子的左右可以交换),这样就转化了越来越小的树比较是否同构,假如有两个树A,B。A树的左子树和B树的右子树同构,B树的左子树和A树的右子树同构,那么这两个树是同构的,也就是说,又回到了之前括号里面的说的,左右顺序没有关系。我们将结点以结构体数组的方式存储,一个树就是一个结构体数组,每一个结构体数组包含的

2020-07-24 21:30:48 2214

原创 树 第四章

树 第四章本章的内容有:树,树的基本性质,二叉树,二叉树的顺序存储,二叉树的链式存储,二叉树的遍历(先序遍历,中序遍历,后序遍历),二叉树的应用引子:当说到查找的时候,目前所学的查找都是在有序数列中进行查找,也就是所说的静态查找,比如说通过顺序查找(将序号为0的数列设置为哨兵,从后面往前查找),二分查找(通过每次二分,将查找的范围缩小一半,时间复杂度为O(logn))。当数据变得繁琐起来,比如说出现了插入和删除,我们就进入了二叉树的结构树就像我们生活中看到的树一样,有根节点,有子节点,有叶节点二叉树

2020-07-23 21:56:44 159

原创 线性结构(第三章)

教材:数据结构(第二版)主编:陈越线性结构:所谓线性结构就是数据像一条线一样串在一起,是一个抽象的概念,其中每一个元素都是直接前驱和直接后驱,数据的存储分为逻辑结构和物理结构,物理结构包括了顺序存储(在内存中用地址连续的一块存储空间顺序存放数据)和链式存储(不需要连续的存储空间),逻辑结构包括了诸如线性表,树,集合,图等,而常见的数组其实是线性表的一种实现,但是线性表和数组之间没有从属关系。线性表的典型应用就是堆栈和队列;顺序存储和逻辑存储的优缺点(原帖地址)本章讲解了:线性表(List)的顺序存储(

2020-07-22 22:40:36 190

原创 习题1.9 有序数组的插入 (20分)

习题1.9 有序数组的插入 (20分)思路分析:将要插入的数字n和已经是递减排序好的数列元素进行比较,从左到右进行遍历,直到有一个元素小于小于n,记录位置为tempposition,然后将n右边的元素右移,将n插入到这个位置,注意其中判断数列是否满或者n是否与数列元素相同bool Insert( List L, ElementType X ){ int i =0; int tempPosition; while(L->Data[i]>X) {

2020-07-19 20:20:43 518

原创 习题1.8 二分查找 (20分)

二分查找思路分析:核心是在已经排序好的数列中找到中位数,然后把要找的数和中位数比较,然后收缩左右边界,最后找到那个数字。注意要判断这个数是否在这个线性表中,找不到就返回 NotFound函数接口:/*#define MAXSIZE 10000typedef int Position;typedef struct LNode{ElementType Data[MAXSIZE];Position Last;}*List;*///元素从下标 1 开始存储//方法一:(采用递归)Posit

2020-07-19 16:40:44 223

原创 汉诺塔问题

汉诺塔问题题目:相传在古印度圣庙中,有一种被称为汉诺塔(Hanoi)的游戏。该游戏是在一块铜板装置上,有三根杆(编号A、B、C),在A杆自下而上、由大到小按顺序放置64个金盘(如下图)。游戏的目标:把A杆上的金盘全部移到C杆上,并仍保持原有顺序叠好。操作规则:每次只能移动一个盘子,并且在移动过程中三根杆上都始终保持大盘在下,小盘在上,操作过程中盘子可以置于A、B、C任一杆上。思路分析:本体看起来十分繁琐,但是通过逐步分割问题便可以解开谜题。假设移动3块金盘,如图所示:运用递归思想可以很好的解决,其核

2020-07-19 11:26:46 340

原创 厘米换算英尺英寸

厘米换算英尺英寸思路分析:这题目简直是一个大坑,给出的公式千万不能想着向数学公式一样反推出来得到foot和inch的关系式,这里公式的意思是 (英尺+英寸/12)=英尺 就是说这整个括号其实表达的都是英尺的意思,然后就是 英尺*0.3048 = 米, 也就是 1 meter = 0.3048 feet由于结果取整,在c/c++语言中,存储int类型的值,除法自动向下取整,但是在计算的时候要注意,centimeter/100.0 和centimeter/100的区别,前面的数会按照浮点数取结果,后面的数

2020-07-19 09:28:16 644

原创 计算机组成原理

**一计算机系统介绍**1.计算机系统分为 硬件和软件2.软件分为 系统软件和应用软件系统软件(用来管理整个计算机系统)包括:语言处理系统,操作系统,服务性程序,数据库管理系统,网络软件应用软件是按任务需要编制成的各种程序3.计算机系统的层次结构4.冯诺依曼计算机其中五大部件就是:运算器,控制器,存储器,输入设备和输出设备,这五大部分直到现在,也构成了现代计算机的基本体系5.现代计算机硬件框图层次化(Hierachy),模块化(Modularity),规则化(Regularity)

2020-07-18 19:26:27 803

原创 实例1.1 最大子列和问题 (20分)

实例1.1 最大子列和问题 (20分)思路分析:本题有三种基本的算法,分别为1.两个循环控制 2.二分法 3.在线处理,其中在线处理的时间复杂度为O(n),这是效率比较高得算法,所以选择它,在线处理的核心思想是,当前n项和小于0时,便舍弃当前计算的前n项和,并且将临时保存的最大值舍弃,然后再依次向下累加,题目中还说如果输入的数都为负数,那么便直接输出0,如果要检查都是负数的意思就是,只有要一个数是正整数数我们可以确保这个数组不全是负数#include <iostream>#define M

2020-07-18 16:49:12 882

原创 自测-5 Shuffling Machine (20分)

自测-5 Shuffling Machine (20分)思路分析:对于英文题目首先要分析题目,题目大概的意思是,按照给定的顺序,对一副全新的(54张牌)扑克牌进行洗牌,我首先想到的就是又是对数组的数字进行交换,这必然会用到两个循环控制,一个控制交换的总次数,一个控制交换的具体实现。对于扑克牌的实现,我本来想的是用string函数的方法将一个字符和数字连接在一起,但是发现有点麻烦,于是又想到直接输入每个扑克牌作为字符串数组,但是54张牌又有一点多,于是我参考了另一位博主的办法(这里是链接),用到了结构体来定

2020-07-17 17:52:09 339 2

原创 自测-4 Have Fun with Numbers (20分)

自测-4 Have Fun with Numbers (20分)思路分析:文章的大概意思是:输入一串k位(k<=20)数字n,将它乘以2,得到结果数字m,m中出现的数字是否和输入的数字n中出现的数字次数一样,即由相同数字组成,只是位置发生了变化,如果是,就返回yes,如果不是,就返回no由于最大可以输入20位的数字,就算是long long 类型的整型也存储不了,而且如果存在一个整型变量中,会导致不好判断每一个数字出现的次数,于是将这个数存放在字符串类型,string,char[]比较合适通过遍

2020-07-17 13:27:33 253 2

原创 自测-3 数组元素循环右移问题 (20分)

自测-3 数组元素循环右移问题 (20分)思路分析:整个数组向右移动,也就是说要移动的位数,移动到了数组的左边方法一:也就是笨办法,将要移动的数列中的最后一个数保存到临时变量,再将剩下的每一个数依次往右移动,最后用临时变量覆盖,即移动到向右移动后的位置。方法二:通过数组的逆置来实现,第一次逆置整个数组,第二次分两部分(以要移动的数量为界)先逆置左边,第三次逆置右边方法一:#include <iostream>#define MAX 100using namespace std;i

2020-07-17 10:04:49 369 2

原创 自测-2 素数对猜想

自测-2 素数对猜想思路分析:首先明确素数的概念:除1和本身以外再无其他的因数的非零自然数(自己想的,并不准确),题目的重点是*“存在无穷多对相邻且差为2的素数”*,其中给出的任意正整数为N(<10^5)。我们可以知道从1开始的素数有:1.2.3.5.7.11.13.17…其中当我们求一个数的因数的时候,只需要从1算到这个数的开方就可以了因为如果一个数不是素数是合数,那么一定可以由两个自然数相乘得到,其中一个大于或等于它的平方根,一个小于或等于它的平方根。并且成对出现。#includ

2020-07-16 21:59:59 193 2

原创 CS相关英文词汇(更新中...)

duplication 重复permutation 排序

2020-07-16 20:46:56 851 2

原创 自测-1 打印沙漏 (20分)

自测-1 打印沙漏 (20分)2020.7.16https://pintia.cn/problem-sets/17/problems/type/7思路分析:可以发现,沙漏的形状从1个字符,分别向上和向下生成,生成第二个沙漏的时候,沙漏顶和沙漏底分别有3个字符,以此类推,生成第三个沙漏时,顶层和底层分别有5个字符,设n为生成沙漏的序列,则沙漏顶层和底层分别有2n-1个字符。将沙漏分别上下两部分,上部分包含中间的一个字符,设h为上三角的层数,则可以发现,h = n,通过规律的查找,还可以发现,可以构成

2020-07-16 20:35:23 310 2

空空如也

空空如也

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

TA关注的人

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