pta 编程题15 列出连通集】的更多相关文章

其它pta数据结构编程题请参见:pta 题目 题目要求分别以深度优先搜索和广度优先搜索输出图的连通集. 广度优先搜索要用到队列,先回顾一下循环队列: struct QNode { int* Data; /* 存储元素的数组 */ int Front, Rear; /* 队列的头.尾指针 */ int MaxSize; /* 队列最大容量 */ }; typedef struct QNode *Queue; Queue CreateQueue( int MaxSize ) { Queue Q =…
其它pta数据结构编程题请参见:pta 题目 和简单版本不同的是,简单版本只需判断能否到达岸边,而这个版本要求求出最少跳数的路径. 简单版本用dfs实现,而这道题用BFS实现. 注意: 岛半径为7.5,而不是15.另外注意一步跳到岸边的情况. #include <iostream> #include <vector> #include <math.h> using namespace std; ; int N, D; struct point { int x, y; }…
其它pta数据结构编程题请参见:pta 题目 这个最短路径问题只需要求两点之间的最短路径,因而在Dijikstra算法中当求出目标点的最短路径之后跳出循环即可. #include <iostream> using namespace std; struct Node { int length; int price; }; int V, E; Node **G; void buildGraph(); void deleteGraph(); void dijkstra(int s, int d);…
其它pta数据结构编程题请参见:pta 题目 这道题考察最小生成树问题,用的是Prim算法. 和Dijkstra算法相比,没有了collect数组,因为dist[v] == 0就代表v被已收录. #include <iostream> using namespace std; int N, M; int** G; void buildGraph(); void deleteGraph(); int prim(); int findMinDist(int dist[]); int main()…
其它pta数据结构编程题请参见:pta 题目 主要用到了深度优先搜索. #include <iostream> using namespace std; struct Vertex { int x; int y; bool marked; }G[]; int N; //总鳄鱼数 int D; //可以跳的距离 bool dfs(Vertex& v); bool firstJump(Vertex v); bool jump(Vertex v1, Vertex v2); bool succ…
其它pta数据结构编程题请参见:pta 题目 题目给出一组字母和每个字母的频数,因为哈夫曼编码不唯一,然后给出几组编码,因为哈夫曼编码不唯一,所以让你判断这些编码是否符合是哈夫曼编码的一种. 解题思路: 1.构造哈夫曼树,并求出总代价COST,即各个字母的频数乘以编码长度的和. 2.对于题目给出的每一组编码,判断是否符合哈夫曼编码,即这组编码是否为前缀码,同时代价cost是否等于计算出的哈夫曼树的代价COST. 判断一组编码是否为前缀码的方法: 将这些编码逐个的添加到哈夫曼树中,对于每一个编码字…
其它pta数据结构编程题请参见:pta 这道题考察的是union-find并查集. 开始把数组中每个元素初始化为-1,代表没有父节点.为了使树更加平衡,可以让每一个连通分量的树根的负值代表这个连通分量包含的节点数,然后在union时把小的树并到大的树上. 另外在find操作时可以用递归的方式使查找路径上的所有节点的父节点都改为根节点,以实现路径压缩,在后续查找过程中会更快. #include <iostream> #include <vector> using namespace…
其它pta数据结构编程题请参见:pta 这道题考察的是最小堆. 堆是一个完全二叉树,因此可用数组表示,一个下标为 i 的结点的父节点下标为 i / 2,子结点下标为 2i 和 2i + 1. 插入元素:先把元素放到数组的最后面,然后不断循环和父节点比较,如果小于父节点则交换. 数组的下标为0存放一个很小的值作为哨兵,当进行插入操作时,如果插入的元素需要放到下标为1的位置时,和下标为0的值比较时会大于这个很小的值,因而会停止. #include <iostream> #include <v…
其它pta数据结构编程题请参见:pta 这道题考察平衡二叉查找树的插入. 为了保证二叉查找树的平衡,当一个结点的左右子树的高度差大于1时就要进行调整. 分为以下四种情况: 插入新节点后,以及旋转之后,需要更新结点的高度. RL旋转可以通过右孩子的LL旋转,然后当前节点的RR旋转实现. 同理,LR旋转可以通过左孩子的RR旋转,然后当前节点的LL旋转实现. #include <iostream> using namespace std; typedef struct Node *Tree; str…
其它pta数据结构编程题请参见:pta 这次的作业考察的是树的遍历. 题目的输入通过栈的pop给出了树的中序遍历的顺序.根据push和pop的顺序构造树的方法为:定义一个变量father来确定父节点,如果父节点还没有pop,那么push操作就构造父节点的左子树,否则构造父节点的右子树:定义一个栈用来确定pop操作弹出的节点,将father赋值为pop的节点,并将此节点的flag值(用来标记已经pop过)标为1. #include <iostream> #include <string&g…
其它pta数据结构编程题请参见:pta 这次的编程作业要求从上到下,从左到右输出一棵树的叶子节点,即树的层序遍历,用队列的方式来实现. 注意enqueue和dequeue函数参数为Queue &q,而不是Queue q,即用引用的方式才能改变实参的值. #include <iostream> using namespace std; struct Node { int left; int right; }; struct Queue { ]; ; ; ; }; int buildTre…
其它pta数据结构编程题请参见:pta 题目请参见:树的同构 因题目中左右子树是按照下标给出,因此用数组存放树是更好的方法. 判断两棵树是否同构:用递归的方法.如果当前两个结点都为空,则返回TRUE:如果一个结点空一个不空,或者两个结点都不为空但是结点存储的数据不同,则返回FALSE.然后递归地的调用函数,判断是否左子树和左子树相同且右子树和右子树相同,或者左子树和左子树相同且右子树和右子树相同. #include <iostream> using namespace std; struct…
第一次提交结果都是YES,后来检查发现Push,Pop函数写的有问题,即Stack sta改为引用Stack &sta,否则不能改变实参的值. #include <iostream> #include <vector> using namespace std; int M;// 栈最大容量 struct Stack { ]; ; }; void push(struct Stack &s, int i); void pop(struct Stack &s);…
编程题6 树的同构 编程题7 List Leaves 编程题8 Tree Traversals Again 编程题10 Root of AVL Tree 编程题12 堆中的路径 编程题13 File Transfer 编程题14 Huffman Codes 编程题15 列出连通集 编程题16 Saving James Bond 1 编程题19 Saving James Bond 2 编程题20 旅游规划 编程题21 公路村村通                                …
很多第一次出Java编程题的老师,不知道Java在PTA中是如何处理输入的.写一篇文章供大家参考. 有多种类型输入的编程题: 类型1:固定数量输入 从控制台读入**两个**数,然后将其相加输出. 对于该题可以有如下两种样例输入输出: 样例输入输出1: 输入: 1 2 输出: 3 或者 样例输入输出2: 输入: 1 2 输出: 3 注意: 样例输入对应着输入文件中的内容,比如对应着输入文件0.in,一般来说该文件的最后还要有一个回车,比如1 2后面应有一个回车. 样例输出对应着输出文件的内容,比如…
后天java考试,现在闲着也是闲着,来做做java题吧. 前不久在网上看见了50道java算法编程题,感觉还不错,记得大一学C语言的时候做过一些,现在用java来回顾下吧,也算应付考试吧. 代码要是有啥不完美的地方还请各位积极指出啊,小的还是菜鸟啦,出错难免的哦~~~ 暂时一篇帖子放5道吧,代码比较占地方,等全部做完了发一个目录吧 [程序1] TestRabbit.java 题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,…
06-图1 列出连通集   (25分) 给定一个有NN个顶点和EE条边的无向图,请用DFS和BFS分别列出其所有的连通集.假设顶点从0到N-1N−1编号.进行搜索时,假设我们总是从编号最小的顶点出发,按编号递增的顺序访问邻接点. 输入格式: 输入第1行给出2个整数NN(0<N\le 100<N≤10)和EE,分别是图的顶点数和边数.随后EE行,每行给出一条边的两个端点.每行中的数字之间用1空格分隔. 输出格式: 按照"{ v_1v​1​​ v_2v​2​​ ... v_kv​k​​ …
前言 上一篇<C算法编程题(六)串的处理> 有些朋友看过我写的这个算法编程题系列,都说你写的不是什么算法,也不是什么C++,大家也给我提出用一些C++特性去实现问题更方便些,在这里谢谢大家提的一些建议和意见,我当时写这个系列的目的不是探讨算法和C++的特性,可能是我标题写的不好吧,让大家误解了,再这里给大家说声抱歉. 大家都学过数学,做过奥数题,其实大家看看我写的前几篇文章就会发现,做这类编程题就像做奥数题一样,锻炼的是我们的逻辑思维能力,我当时写的目的也是这样.如果说用一些语言的特性去实现,…
前言 上一篇<C算法编程题(三)画表格> 上几篇说的都是根据要求输出一些字符.图案等,今天就再说一个“上三角”,有点类似于第二篇说的正螺旋,输出的字符少了,但是逻辑稍微复杂了点. 程序描述 方阵的主对角线之上称为“上三角”.    请你设计一个用于填充n阶方阵的上三角区域的程序.填充的规则是:使用1,2,3….的自然数列,从左上角开始,按照顺时针方向螺旋填充.    例如:当n=3时,输出:    1 2 3    6 4    5    当n=4时,输出:    1  2 3 4    9…
前言 上一篇<C算法编程题(一)扑克牌发牌> 写东西前总是喜欢吐槽一些东西,还是多啰嗦几句吧,早上看了一篇博文<谈谈外企涨工资那些事>,里面楼主讲到外企公司包含的五类人,其实不只是外企如此,私企和合资的都是如此,一些公司反正什么人都有,就怕你的上司是第一种,你的同事是第二种.这种搭配最讨人厌,反正技术和工作效率不怎么样,“做人”还蛮会做的.其实不管公司怎样,同事怎样,工作环境怎样.就像里面楼主说的,都要坚持自己选择的路,并坚持走下去... 这几天都在博园逛一些技术大牛的博客,也买了…
前言 上周写<我的编程开始(C)>这篇文章的时候,说过有时间的话会写些算法编程的题目,可能是这两天周末过的太舒适了,忘记写了.下班了,还没回去,闲来无事就写下吧. 因为写C++的编程题和其他语言实现功能不一样,要动脑子,写笔记,思考整个的流程.就比如实现字符串截取,C#直接一个SubString搞定,C可能要用到指针来实现.当时参赛培训的时候不知道死了多少的脑细胞,现在想想都后怕,但是前话都说了,得必须写了.今天写的这个扑克牌发牌的题目,是我在参赛培训的时候练习的,记得当时写了好长时间才搞出来…
这次笔试是今年校招我参加的第一次笔试..出了很多状况,基础知识不扎实,导致选择题耽误了太多时间,导致后面的题目没做完,编程题也没有在 时间内写出来,基本没有面试机会了.不过我继续研究第二个编程题,在10几分钟后做了出来. 这个题目具体已经不记得了,但是大概意思还是记得,我们把由4和7组成的数,按小大排序,例如:4 7 44 47 74 77 444 447 474 477 744 747 774 777 他们的序号依次为1,2,3,4.....,题目的输入是每行输入一个整数,可以很大(好像是最大…
编程题#1 来源: POJ (Coursera声明:在POJ上完成的习题将不会计入Coursera的最后成绩.) 注意: 总时间限制: 1000ms 内存限制: 65536kB 描述 实现一个三维数组模版CArray3D,可以用来生成元素为任意类型变量的三维数组,使得下面程序输出结果是: 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,3…
编程题#1:计算矩阵边缘元素之和 来源: POJ (Coursera声明:在POJ上完成的习题将不会计入Coursera的最后成绩.) 注意: 总时间限制: 1000ms 内存限制: 65536kB 描述 输入一个整数矩阵,计算位于矩阵边缘的元素之和.所谓矩阵边缘的元素,就是第一行和最后一行的元素以及第一列和最后一列的元素. 输入 第一行为整数k,表示有k组数据. 每组数据有多行组成,表示一个矩阵: 第一行分别为矩阵的行数m和列数n(m < 100,n < 100),两者之间以空格分隔. 接下…
编程题#3:排队游戏 来源: POJ (Coursera声明:在POJ上完成的习题将不会计入Coursera的最后成绩.) 注意: 总时间限制: 1000ms 内存限制: 65536kB 描述 在幼儿园中,老师安排小朋友做一个排队的游戏.首先老师精心的把数目相同的小男孩和小女孩编排在一个队列中,每个小孩按其在队列中的位置发给一个编号(编 号从0开始).然后老师告诉小朋友们,站在前边的小男孩可以和他后边相邻的小女孩手拉手离开队列,剩余的小朋友重新站拢,再按前后相邻的小男孩小女孩手拉 手离开队列游戏…
50道经典的JAVA编程题(31-35),今天考完了java,在前篇博客里面贴出了题了,见:<今天考试的JAVA编程题>.考完了也轻松了,下个星期一还考微机原理呢,啥都不会,估计今天就做到这了,明天要投入"预习"状态了!!!等全部考试完了会继续完成这50道题的~ [程序31] ArrayConverse.java题目:将一个数组逆序输出.1.程序分析:用第一个与最后一个交换. javapackage test50; /** * @author VellBibi *[程序31…
50道经典的JAVA编程题(26-30),这么晚了,早点睡了要,明早8点考java祝我好运吧!!!晚安~ [程序26]Ex26.java(跳过了,好没意思的题啊)题目:请输入星期几的第一个字母来判断一下是星期几,如果第一个字母一样,则继续 判断第二个字母.1.程序分析:用情况语句比较好,如果第一个字母一样,则判断用情况语句或if语句判断第二个字母. 使用字符数组搞定 [程序27] SuShu.java题目:求100之内的素数 参考见[程序2] FindPrimeNumber.java java/…
50道经典的JAVA编程题 (11-15),新年的第一天,继续啦...\(^o^)/~,这50道题都跨年了啊...哈哈 [程序11] TestTN.java 题目:有1.2.3.4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少? 1.程序分析:可填在百位.十位.个位的数字都是1.2.3.4.组成所有的排列后再去 掉不满足条件的排列. package test50; /** * @author VellBibi *[程序11] TestTN.java *题目:有1.2.3.4个数字,能…
几个要注意的地方: (1)Java OJ,必须将类名写成Main (2)关于如何输入多组测试数据,用二维数组去存储是一个方法,直接在while里面做也可以          但是如果  (3)关于整形int越界的问题要考虑,因此用long来做.输出的时候也要注意大小写,换行输出这些细节.   [编程题]A+B和C (15) 给定区间[-2^31, 2^31]内的3个整数A.B和C,请判断A+B是否大于C. 输入描述: 输入第1行给出正整数T(<=10),是测试用例的个数.随后给出T组测试用例,每…
<编程题> 1.[Maximum Product Subarray 求最大子数组乘积] 这个求最大子数组乘积问题是由最大子数组之和问题演变而来,但是却比求最大子数组之和要复杂,因为在求和的时候,遇到0,不会改变最大值,遇到负数,也只是会减小最大值而已.而在求最大子数组乘积的问题中,遇到0会使整个乘积为0,而遇到负数,则会使最大乘积变成最小乘积,正因为有负数和0的存在,使问题变得复杂了不少.比如,我们现在有一个数组[2, 3, -2, 4],我们可以很容易的找出所有的连续子数组,[2], [3]…