![](https://img-blog.csdnimg.cn/20201014180756754.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
基础算法
葉_蕖
放弃不难,但坚持一定很酷
展开
-
7-2 天梯地图 (30 分)
本题要求你实现一个天梯赛专属在线地图,队员输入自己学校所在地和赛场地点后,该地图应该推荐两条路线:一条是最快到达路线;一条是最短距离的路线。题目保证对任意的查询请求,地图上都至少存在一条可达路线。输入格式:输入在第一行给出两个正整数N(2 ≤ N ≤ 500)和M,分别为地图中所有标记地点的个数和连接地点的道路条数。随后M行,每行按如下格式给出一条道路的信息:V1 V2 one-wa...原创 2018-11-18 14:25:33 · 2051 阅读 · 2 评论 -
6-3 先序输出叶结点 (15 分)
本题要求按照先序遍历的顺序输出给定二叉树的叶结点。函数接口定义:void PreorderPrintLeaves( BinTree BT );其中BinTree结构定义如下:typedef struct TNode *Position;typedef Position BinTree;struct TNode{ ElementType Data; BinTree Le...原创 2018-11-01 23:59:16 · 6511 阅读 · 0 评论 -
6-2 二叉树的遍历 (25 分)
本题要求给定二叉树的4种遍历。函数接口定义:void InorderTraversal( BinTree BT );void PreorderTraversal( BinTree BT );void PostorderTraversal( BinTree BT );void LevelorderTraversal( BinTree BT );其中BinTree结构定义如下:type...原创 2018-11-01 22:36:14 · 10375 阅读 · 0 评论 -
7-21 求前缀表达式的值(二叉树)
算术表达式有前缀表示法、中缀表示法和后缀表示法等形式。前缀表达式指二元运算符位于两个运算数之前,例如2+3*(7-4)+8/4的前缀表达式是:+ + 2 * 3 - 7 4 / 8 4。请设计程序计算前缀表达式的结果值。输入格式:输入在一行内给出不超过30个字符的前缀表达式,只包含+、-、*、\以及运算数,不同对象(运算数、运算符号)之间以空格分隔。输出格式:输出前缀表达式的运算结果,保留...原创 2018-11-03 19:48:27 · 1868 阅读 · 0 评论 -
7-1 根据后序和中序遍历输出先序遍历 (25 分)
本题要求根据给定的一棵二叉树的后序遍历和中序遍历结果,输出该树的先序遍历结果。输入格式:第一行给出正整数N(≤30),是树中结点的个数。随后两行,每行给出N个整数,分别对应后序遍历和中序遍历结果,数字间以空格分隔。题目保证输入正确对应一棵二叉树。输出格式:在一行中输出Preorder:以及该树的先序遍历结果。数字间有1个空格,行末不得有多余空格。输入样例:72 3 1 5 7 6 4...原创 2018-11-01 22:17:42 · 1085 阅读 · 0 评论 -
还原二叉树
给定一棵二叉树的先序遍历序列和中序遍历序列,输出该二叉树的后序遍历序列。输入格式:输入首先给出正整数N(≤50),为树中结点总数。下面两行先后给出先序和中序遍历序列,均是长度为N的不包含重复英文字母(区别大小写)的字符串。输出格式:长度为N的不包含重复英文字母(区别大小写)的字符串输入样例:9ABDFGHIECFDHGIBEAC输出样例:FHIGDEBCA根据还原二叉树那...原创 2018-11-01 20:50:58 · 154 阅读 · 0 评论 -
7-23 还原二叉树 (25 分)
给定一棵二叉树的先序遍历序列和中序遍历序列,要求计算该二叉树的高度。输入格式:输入首先给出正整数N(≤50),为树中结点总数。下面两行先后给出先序和中序遍历序列,均是长度为N的不包含重复英文字母(区别大小写)的字符串。输出格式:输出为一个整数,即该二叉树的高度。输入样例:9ABDFGHIECFDHGIBEAC输出样例:5根据前序和中序来确定左右子树,先找到树根,中序的树根...原创 2018-11-01 20:29:16 · 4339 阅读 · 6 评论 -
7-3 树的同构 (25 分)
给定两棵树T1和T2。如果T1可以通过若干次左右孩子互换就变成T2,则我们称两棵树是“同构”的。例如图1给出的两棵树就是同构的,因为我们把其中一棵树的结点A、B、G的左右孩子互换后,就得到另外一棵树。而图2就不是同构的。图1图2现给定两棵树,请你判断它们是否是同构的。输入格式:输入给出2棵二叉树树的信息。对于每棵树,首先在一行中给出一个非负整数N (≤10),即该树的结点数(此时假设...原创 2018-11-03 10:52:52 · 2518 阅读 · 0 评论 -
1050 螺旋矩阵 (25 分)
本题要求将给定的 N 个正整数按非递增的顺序,填入“螺旋矩阵”。所谓“螺旋矩阵”,是指从左上角第 1 个格子开始,按顺时针螺旋方向填充。要求矩阵的规模为 m 行 n 列,满足条件:m×n 等于 N;m≥n;且 m−n 取所有可能值中的最小值。输入格式:输入在第 1 行中给出一个正整数 N,第 2 行给出 N 个待填充的正整数。所有数字不超过 104,相邻数字以空格分隔。输出格式:输出...原创 2018-10-30 20:40:11 · 278 阅读 · 0 评论 -
1040 有几个PAT (25 分)
字符串 APPAPT 中包含了两个单词 PAT,其中第一个 PAT 是第 2 位§,第 4 位(A),第 6 位(T);第二个 PAT 是第 3 位§,第 4 位(A),第 6 位(T)。现给定字符串,问一共可以形成多少个 PAT?输入格式:输入只有一行,包含一个字符串,长度不超过105,只包含 P、A、T 三种字母。输出格式:在一行中输出给定字符串中包含多少个 PAT。由于结果可...原创 2018-10-30 19:22:24 · 234 阅读 · 0 评论 -
7-7 六度空间 (30 分)
“六度空间”理论又称作“六度分隔(Six Degrees of Separation)”理论。这个理论可以通俗地阐述为:“你和任何一个陌生人之间所间隔的人不会超过六个,也就是说,最多通过五个人你就能够认识任何一个陌生人。”如图1所示。图1 六度空间示意图“六度空间”理论虽然得到广泛的认同,并且正在得到越来越多的应用。但是数十年来,试图验证这个理论始终是许多社会学家努力追求的目标。然而由于历史...原创 2018-10-27 21:40:00 · 919 阅读 · 0 评论 -
6-1 求二叉树高度 (20 分)
本题要求给定二叉树的高度。函数接口定义:int GetHeight( BinTree BT );其中BinTree结构定义如下:typedef struct TNode *Position;typedef Position BinTree;struct TNode{ ElementType Data; BinTree Left; BinTree Right;}...原创 2018-11-02 00:01:31 · 8425 阅读 · 0 评论 -
7-28 搜索树判断 (25 分)
对于二叉搜索树,我们规定任一结点的左子树仅包含严格小于该结点的键值,而其右子树包含大于或等于该结点的键值。如果我们交换每个节点的左子树和右子树,得到的树叫做镜像二叉搜索树。现在我们给出一个整数键值序列,请编写程序判断该序列是否为某棵二叉搜索树或某镜像二叉搜索树的前序遍历序列,如果是,则输出对应二叉树的后序遍历序列。输入格式:输入的第一行包含一个正整数N(≤1000),第二行包含N个整数,为给...原创 2018-11-06 18:32:33 · 944 阅读 · 0 评论 -
判断一棵树是否是完全二叉树
首先要知道完全二叉树的定义: 前n-1层都是满的,第n层如有空缺,则是缺在右边,即第n层的最右边的节点,它的左边是满的,右边是空的。以二叉搜索树举例。#include <bits/stdc++.h>using namespace std;typedef struct BNode* BTree;struct BNode{ int data; BTree lef...原创 2018-11-06 19:03:42 · 1756 阅读 · 0 评论 -
7-1 关键活动 (30 分)
假定一个工程项目由一组子任务构成,子任务之间有的可以并行执行,有的必须在完成了其它一些子任务后才能执行。“任务调度”包括一组子任务、以及每个子任务可以执行所依赖的子任务集。比如完成一个专业的所有课程学习和毕业设计可以看成一个本科生要完成的一项工程,各门课程可以看成是子任务。有些课程可以同时开设,比如英语和C程序设计,它们没有必须先修哪门的约束;有些课程则不可以同时开设,因为它们有先后的依赖关系...原创 2018-11-21 00:31:22 · 3039 阅读 · 1 评论 -
6-1 邻接矩阵存储图的深度优先遍历 (20 分)
试实现邻接矩阵存储图的深度优先遍历。函数接口定义:void DFS( MGraph Graph, Vertex V, void (*Visit)(Vertex) );其中MGraph是邻接矩阵存储的图,定义如下:typedef struct GNode *PtrToGNode;struct GNode{ int Nv; /* 顶点数 */ int Ne; /* 边...原创 2018-11-12 21:18:04 · 13474 阅读 · 0 评论 -
lower_bound( )和upper_bound( )用法
首先,使用的前提是排好序的非递减数组。lower_bound( )和upper_bound( )都是利用二分查找的方法在一个排好序的数组中进行查找的。lower_bound( begin,end,num):从数组的begin位置到end-1位置二分查找第一个大于或等于num的数字,找到返回该数字的地址,不存在则返回end。通过返回的地址减去起始地址begin,得到找到数字在数组中的下标。upp...原创 2018-11-13 21:56:15 · 135 阅读 · 0 评论 -
1044 Shopping in Mars (25 分)
Shopping in Mars is quite a different experience. The Mars people pay by chained diamonds. Each diamond has a value (in Mars dollars M$). When making the payment, the chain can be cut at any position ...原创 2018-11-13 21:43:06 · 151 阅读 · 0 评论 -
计算给定二叉树T的宽度
下列代码的功能是计算给定二叉树T的宽度。二叉树的宽度是指各层结点数的最大值。函数Queue_rear和Queue_front分别返回当前队列Q中队尾和队首元素的位置。和bfs算法有点相似。。typedef struct TreeNode *BinTree;struct TreeNode{ int Key; BinTree Left; BinTree Right;};...原创 2018-11-05 21:18:07 · 6361 阅读 · 0 评论 -
6-2 邻接表存储图的广度优先遍历 (20 分)
试实现邻接表存储图的广度优先遍历。函数接口定义:void BFS ( LGraph Graph, Vertex S, void (*Visit)(Vertex) );其中LGraph是邻接表存储的图,定义如下:/* 邻接点的定义 */typedef struct AdjVNode *PtrToAdjVNode; struct AdjVNode{ Vertex AdjV; ...原创 2018-11-12 22:10:01 · 6259 阅读 · 1 评论 -
6-12 二叉搜索树的操作集 (30 分)
本题要求实现给定二叉搜索树的5种常用操作。函数接口定义:BinTree Insert( BinTree BST, ElementType X );BinTree Delete( BinTree BST, ElementType X );Position Find( BinTree BST, ElementType X );Position FindMin( BinTree BST );...原创 2018-11-02 21:35:22 · 2670 阅读 · 0 评论 -
7-4 是否同一棵二叉搜索树 (25 分)
给定一个插入序列就可以唯一确定一棵二叉搜索树。然而,一棵给定的二叉搜索树却可以由多种不同的插入序列得到。例如分别按照序列{2, 1, 3}和{2, 3, 1}插入初始为空的二叉搜索树,都得到一样的结果。于是对于输入的各种插入序列,你需要判断它们是否能生成一样的二叉搜索树。输入格式:输入包含若干组测试数据。每组数据的第1行给出两个正整数N (≤10)和L,分别是每个序列插入元素的个数和需要检查的...原创 2018-11-02 20:30:31 · 408 阅读 · 0 评论 -
判断一颗二叉树是否是另一颗树的子树。
思路:首先找到值相同的根节点,然后递归判断是否完全相同。(方便起见,样例还是建一个二叉搜索树)#include <bits/stdc++.h>using namespace std;typedef struct BNode* BTree;struct BNode{ int data; BTree left; BTree right;};void...原创 2018-11-06 21:09:49 · 392 阅读 · 0 评论 -
判断二叉树是否是平衡二叉树
平衡二叉搜索树(Balanced Binary Tree)具有以下性质:它是一棵空树或它的左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉树。思路:如果一颗二叉树的所有子树都是平衡二叉树,它一定是平衡二叉树。#include <bits/stdc++.h>using namespace std;typedef struct BNode* BTree;st...原创 2018-11-06 19:18:29 · 274 阅读 · 0 评论 -
7-6 列出连通集 (25 分)
给定一个有N个顶点和E条边的无向图,请用DFS和BFS分别列出其所有的连通集。假设顶点从0到N−1编号。进行搜索时,假设我们总是从编号最小的顶点出发,按编号递增的顺序访问邻接点。输入格式:输入第1行给出2个整数N(0<N≤10)和E,分别是图的顶点数和边数。随后E行,每行给出一条边的两个端点。每行中的数字之间用1空格分隔。输出格式:按照"{ v1 v2 … vk }...原创 2018-10-27 17:35:20 · 553 阅读 · 0 评论 -
DFS(深搜)算法解析
图是一种灵活的数据结构,一般作为一种模型用来定义对象之间的关系或联系。对象由顶点(V)表示,而对象之间的关系或者关联则通过图的边(E)来表示。 图可以分为有向图和无向图,一般用G=(V,E)来表示图。经常用邻接矩阵或者邻接表来描述一副图。 在图的基本算法中,最初需要接触的就是图的遍历算法,根据访问节点的顺序,可分为广度优先搜索(BFS)和...转载 2018-10-27 16:53:13 · 567 阅读 · 0 评论 -
二分查找
二分查找也称折半查找(Binary Search),它是一种效率较高的查找方法。但是,折半查找要求线性表必须采用顺序存储结构,而且表中元素按关键字有序排列。查找过程首先,假设表中元素是按升序排列,将表中间位置记录的关键字与查找关键字比较,如果两者相等,则查找成功;否则利用中间位置记录将表分成前、后两个子表,如果中间位置记录的关键字大于查找关键字,则进一步查找前一子表,否则进一步查找后一子表。重...原创 2018-10-19 17:20:27 · 174 阅读 · 0 评论 -
UVA - 489 Hangman Judge
#include <bits/stdc++.h>using namespace std;string s,s1;int W,Le;int f,cas;void guess(char c){ int t=1; for(int i=0; i<s.length(); i++) { if(s[i]==c) { ...原创 2018-10-09 19:21:08 · 489 阅读 · 0 评论 -
UVA - 1588 Kickdown
#include <bits/stdc++.h>using namespace std;int n1,n2;string a,b;int min( int a, int b){ return a<b?a:b;}int lenm(string s1,string s2,int n){ int length=n1+n2; int minn=m...原创 2018-10-09 19:13:21 · 658 阅读 · 0 评论 -
UVA - 815 Flooded!
模拟一下#include <bits/stdc++.h>using namespace std;#define MAXN 900int main(){ int a[MAXN]; double sum,h,ev; int cases=0,n,m,po,t; while(cin>>n>>m&&n) ...原创 2018-10-09 19:07:01 · 526 阅读 · 0 评论 -
UVA - 12108 Extraordinarily Tired Students
#include <bits/stdc++.h>using namespace std;#define N 100010int main(){ int x[14],y[14],z[14]; int n,t,f=0; while(cin>>n&&n) { for(int i=0; i<n; i++...原创 2018-10-09 18:59:30 · 179 阅读 · 0 评论 -
UVA - 220 Othello(黑白棋)
就是模拟。。代码:#include <bits/stdc++.h>using namespace std;int xx[] = {-1,-1,-1, 1,1,1,0, 0};int yy[] = {-1, 0, 1,-1,0,1,1,-1};char mmp[10][10];int fff[2][10][10];void move(int x, int y, int ...原创 2018-10-09 18:53:11 · 1280 阅读 · 0 评论 -
HUD 2002 球体积
根据输入的半径值,计算球的体积。Input输入数据有多组,每组占一行,每行包括一个实数,表示球的半径。Output输出对应的球的体积,对于每组输入数据,输出一行,计算结果保留三位小数。Sample Input11.5Sample Output4.18914.137#include <bits/stdc++.h>#define PI 3.1415927using...原创 2018-10-15 21:22:03 · 117 阅读 · 0 评论 -
7-8 哈利·波特的考试 (25 分)
哈利·波特要考试了,他需要你的帮助。这门课学的是用魔咒将一种动物变成另一种动物的本事。例如将猫变成老鼠的魔咒是haha,将老鼠变成鱼的魔咒是hehe等等。反方向变化的魔咒就是简单地将原来的魔咒倒过来念,例如ahah可以将老鼠变成猫。另外,如果想把猫变成鱼,可以通过念一个直接魔咒lalala,也可以将猫变老鼠、老鼠变鱼的魔咒连起来念:hahahehe。现在哈利·波特的手里有一本教材,里面列出了所有...原创 2018-10-13 18:15:16 · 613 阅读 · 0 评论 -
设计一个教师类Teacher(java)
设计一个教师类Teacher(属于cn.net.sdkd包),要求:属性有编号(int no)、姓名(String name)、年龄(int age)、所属学院(String seminary),为这些属性设置相应的get和set方法。为Teacher类重写equals方法,要求:当两个教师对象的no相同时返回true。重写Teacher类的toString方法,通过该方法可以返回“编号为...原创 2018-10-26 22:23:57 · 19021 阅读 · 0 评论 -
7-1 最长对称子串 (25 分)
对给定的字符串,本题要求你输出最长对称子串的长度。例如,给定Is PAT&amp;amp;TAP symmetric?,最长对称子串为s PAT&amp;amp;TAP s,于是你应该输出11。输入格式:输入在一行中给出长度不超过1000的非空字符串。输出格式:在一行中输出最长对称子串的长度。输入样例:Is PAT&amp;amp;TAP symmetric?输出样例:11#include&amp;l原创 2018-10-17 20:12:49 · 1411 阅读 · 0 评论 -
7-25 朋友圈 (25 分)
某学校有N个学生,形成M个俱乐部。每个俱乐部里的学生有着一定相似的兴趣爱好,形成一个朋友圈。一个学生可以同时属于若干个不同的俱乐部。根据“我的朋友的朋友也是我的朋友”这个推论可以得出,如果A和B是朋友,且B和C是朋友,则A和C也是朋友。请编写程序计算最大朋友圈中有多少人。输入格式:输入的第一行包含两个正整数N(≤30000)和M(≤1000),分别代表学校的学生总数和俱乐部的个数。后面的M行每...原创 2018-10-20 20:05:40 · 2071 阅读 · 0 评论 -
7-27 家谱处理 (30 分)
人类学研究对于家族很感兴趣,于是研究人员搜集了一些家族的家谱进行研究。实验中,使用计算机处理家谱。为了实现这个目的,研究人员将家谱转换为文本文件。下面为家谱文本文件的实例:John Robert Frank Andrew Nancy David家谱文本文件中,每一行包含一个人的名字。第一行中的名字是这个家族最早的祖先。家谱仅包含最早祖先的后代,而他们的丈夫或妻...原创 2018-10-20 21:02:10 · 1314 阅读 · 0 评论 -
7-34 任务调度的合理性 (25 分)
假定一个工程项目由一组子任务构成,子任务之间有的可以并行执行,有的必须在完成了其它一些子任务后才能执行。“任务调度”包括一组子任务、以及每个子任务可以执行所依赖的子任务集。比如完成一个专业的所有课程学习和毕业设计可以看成一个本科生要完成的一项工程,各门课程可以看成是子任务。有些课程可以同时开设,比如英语和C程序设计,它们没有必须先修哪门的约束;有些课程则不可以同时开设,因为它们有先后的依赖关系,...原创 2018-10-27 13:30:33 · 377 阅读 · 0 评论 -
7-32 哥尼斯堡的“七桥问题” (25 分)
哥尼斯堡是位于普累格河上的一座城市,它包含两个岛屿及连接它们的七座桥,如下图所示。可否走过这样的七座桥,而且每桥只走过一次?瑞士数学家欧拉(Leonhard Euler,1707—1783)最终解决了这个问题,并由此创立了拓扑学。这个问题如今可以描述为判断欧拉回路是否存在的问题。欧拉回路是指不令笔离开纸面,可画过图中每条边仅一次,且可以回到起点的一条回路。现给定一个无向图,问是否存在欧拉回路...原创 2018-10-24 21:24:30 · 1469 阅读 · 0 评论