![](https://img-blog.csdnimg.cn/5496746f39034da8a8623a4aeaf2b60f.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
中国大学MOOC-陈越、何钦铭-数据结构
中国大学mooc-浙大数据结构-陈越、何钦铭-习题
儒rs
小小的天有大大的梦想,我有属于我的天。
展开
-
哈利波特的考试
输入样例:6 113 4 701 2 15 4 502 6 505 6 601 3 704 6 603 6 805 1 1002 4 605 2 80结尾无空行输出样例:4 70结尾无空行代码:#include<iostream>#define Maxsize 101#define INF 65535using namespace std;int animal[Maxsize][Maxsize];int N,M;int main(){ c.原创 2021-11-13 10:22:15 · 905 阅读 · 0 评论 -
旅游规划(Dijkstra)
输入样例:4 5 0 30 1 1 201 3 2 300 3 4 100 2 2 202 3 1 20结尾无空行输出样例:3 40结尾无空行代码#include<iostream>#define INFINITY 65535using namespace std;int edges[505][505];int price[505][505];int N;void Dijkstra(int begin,int end){ int v,w,k,min;.原创 2021-11-13 10:17:29 · 739 阅读 · 0 评论 -
公路村村通
输入样例:6 151 2 51 3 31 4 71 5 41 6 22 3 42 4 62 5 22 6 63 4 63 5 13 6 14 5 104 6 85 6 3结尾无空行输出样例:12结尾无空行Kruskal算法#include<iostream>#include<vector>#include<cmath>#include<algorithm>using namespace std;int.原创 2021-11-11 17:21:55 · 224 阅读 · 0 评论 -
六度空间
输入样例:10 91 22 33 44 55 66 77 88 99 10输出样例:1: 70.00%2: 80.00%3: 90.00%4: 100.00%5: 100.00%6: 100.00%7: 100.00%8: 90.00%9: 80.00%10: 70.00%本题的关键在于找出与某个顶点距离不超过6的顶点个数cnt,既然是要找顶点,那就要涉及图的遍历,这里采用广搜是比较合适的,我们可以弄个结构体,一个记录顶点的编号、一个记录顶点所处的层次(也..原创 2020-12-30 19:59:34 · 67 阅读 · 0 评论 -
功夫传人
输入样例:10 18.0 1.003 2 3 51 91 41 70 72 6 11 80 90 40 3输出样例:404本题明显是用图来表示,要求得道者的功力值,我们就需要对图进行遍历,如果不是得到者,那么每次遍历子结点时功力都会打折扣,如果是得道者,则需要功力翻大N倍,然后用sum把它们累加起来,所以我们需要对得道者这样的结点做标记,以便在遍历过程与普通结点区别开来,我这里采用的是新开了个数组来记录得道者,若是得道者,则在相应的顶点位置存入N,若不是,则存入0. 当然..原创 2020-12-30 19:43:51 · 89 阅读 · 0 评论 -
红色警报
进阶实验6-3.1 红色警报 (25分)战争中保持各个城市间的连通性非常重要。本题要求你编写一个报警程序,当失去一个城市导致国家被分裂为多个无法连通的区域时,就发出红色警报。注意:若该国本来就不完全连通,是分裂的k个区域,而失去一个城市并不改变其他城市之间的连通性,则不要发出警报。输入格式:输入在第一行给出两个整数N(0 < N ≤ 500)和M(≤ 5000),分别为城市个数(于是默认城市从0到N-1编号)和连接两城市的通路条数。随后M行,每行给出一条通路所连接的两个城市的编号,其间以1个空格原创 2020-12-30 17:11:32 · 228 阅读 · 0 评论 -
拯救007
基础实验6-2.3 拯救007 (25分)在老电影“007之生死关头”(Live and Let Die)中有一个情节,007被毒贩抓到一个鳄鱼池中心的小岛上,他用了一种极为大胆的方法逃脱 —— 直接踩着池子里一系列鳄鱼的大脑袋跳上岸去!(据说当年替身演员被最后一条鳄鱼咬住了脚,幸好穿的是特别加厚的靴子才逃过一劫。)设鳄鱼池是长宽为100米的方形,中心坐标为 (0, 0),且东北角坐标为 (50, 50)。池心岛是以 (0, 0) 为圆心、直径15米的圆。给定池中分布的鳄鱼的坐标、以及007一次能跳跃的原创 2020-12-30 17:01:32 · 568 阅读 · 0 评论 -
喊山
7-14 喊山 (30分)喊山,是人双手围在嘴边成喇叭状,对着远方高山发出“喂—喂喂—喂喂喂……”的呼唤。呼唤声通过空气的传递,回荡于深谷之间,传送到人们耳中,发出约定俗成的“讯号”,达到声讯传递交流的目的。原来它是彝族先民用来求援呼救的“讯号”,慢慢地人们在生活实践中发现了它的实用价值,便把它作为一种交流工具世代传袭使用。(图文摘自:http://news.xrxxw.com/newsshow-8018.html)一个山头呼喊的声音可以被临近的山头同时听到。题目假设每个山头最多有两个能听到它的临近山原创 2020-12-30 16:49:28 · 384 阅读 · 0 评论 -
深入 虎穴
#include <iostream>#include <vector>#include <queue> using namespace std; const int INF = 65553;const int maxn = 1e5 +6;vector<int> v[maxn];int vis[maxn];int d[maxn];queue<int> q;int main(){ int n; cin>.原创 2020-12-30 16:40:35 · 99 阅读 · 0 评论 -
列出连通集
普通的深搜和广搜问题。#include<iostream>#include<vector>#include<cstring>#include<queue>using namespace std;int a[100],n;int N,E;vector<vector<int>> edges;void DFS(int v,bool *visited){ a[n++]=v; visited[v]=true; for(.原创 2020-12-30 16:20:28 · 75 阅读 · 0 评论 -
文件传输
输出格式:对每个C开头的查询,如果c1和c2之间可以传输文件,就在一行中输出"yes",否则输出"no"。当读到终止符时,在一行中输出"The network is connected.“如果网络中所有计算机之间都能传输文件;或者输出"There are k components.”,其中k是网络中连通集的个数。输入样例 1:5C 3 2I 3 2C 1 5I 4 5I 2 4C 3 5S输出样例 1:nonoyesThere are 2 components.输入样例.原创 2020-12-30 16:07:56 · 95 阅读 · 0 评论 -
部落
本题很明显是个并查集的问题,并查集主要就两个函数,find()和merge(),寻找根的函数和合并函数,若根相同则属于同个集合,不需要合并,若根不同,则需要进行合并。#include<iostream>using namespace std;int parent[10001]={0};int find(int i){ // 查找编号i所在的集合的根 while (parent[i]>0) i=parent[i]; return i;}void merge(int i,.原创 2020-12-30 15:49:54 · 97 阅读 · 0 评论 -
是否完全二叉搜索树
7-13 是否完全二叉搜索树 (30分)将一系列给定数字顺序插入一个初始为空的二叉搜索树(定义为左子树键值大,右子树键值小),你需要判断最后的树是否一棵完全二叉树,并且给出其层序遍历的结果。输入格式:输入第一行给出一个不超过20的正整数N;第二行给出N个互不相同的正整数,其间以空格分隔。输出格式:将输入的N个正整数顺序插入一个初始为空的二叉搜索树。在第一行中输出结果树的层序遍历结果,数字间以1个空格分隔,行的首尾不得有多余空格。第二行输出YES,如果该树是完全二叉树;否则输出NO。输入样例1:原创 2020-12-29 21:44:02 · 167 阅读 · 0 评论 -
哈夫曼编码
7-7 哈夫曼编码 (30分)给定一段文字,如果我们统计出字母出现的频率,是可以根据哈夫曼算法给出一套编码,使得用此编码压缩原文可以得到最短的编码总长。然而哈夫曼编码并不是唯一的。例如对字符串"aaaxuaxz",容易得到字母 ‘a’、‘x’、‘u’、‘z’ 的出现频率对应为 4、2、1、1。我们可以设计编码 {‘a’=0, ‘x’=10, ‘u’=110, ‘z’=111},也可以用另一套 {‘a’=1, ‘x’=01, ‘u’=001, ‘z’=000},还可以用 {‘a’=0, ‘x’=11, ‘u原创 2020-12-29 21:27:44 · 6714 阅读 · 0 评论 -
修理牧场
这一题很明显可以用哈夫曼树去解决,因为它其实就是建立哈夫曼树的过程,要求把木头锯成N块木块,而且要最少花费,其实在建立哈夫曼树的过程相当于把锯出来的木头按最少花费的方式结合回去。#include<iostream>#include<queue>#include<algorithm>using namespace std;typedef struct Node{ int data; int parent;}Node;void SelectSmall(N.原创 2020-12-29 20:54:46 · 101 阅读 · 1 评论 -
根据后序中序序列建树
本题我写了两种算法来实现根据中序后序序列建树,但是原理其实大同小异,都是先从后序序列中去挑选根节点存入树中,再遍历中序序列找到根节点,根据找到的根节点位置去划分出左右子树。所以关键就是如何找到每次的根节点,以及如何确定出中序序列的遍历范围。代码1#include<iostream>#include<vector>#include<queue>using namespace std;template <class T>struct BiNode{.原创 2020-12-29 20:32:46 · 537 阅读 · 0 评论 -
根据前序中序序列建树
本题的核心是根据前序和中序序列建树,显然这可以用递归去实现。1 每次从前序序列中找到根节点存入树当中2 遍历中序序列中找到该根结点位置,就可以划分出左右子树3 先递归建左子树(也就是重复1、2),此时ipre=ipre+1,imid=0,n=i4 再递归建右子树(也就是重复1、2),此时ipre=ipre+i+1,imid=imid+i+1,n=n-i-1(因为建完了左子树,所以需要跳过左子树的i个结点,结点个数也需要减掉左子树的i个结点)#include<iostream>usi.原创 2020-12-29 20:10:41 · 1697 阅读 · 0 评论 -
03-树3 Tree Traversals Again
An inorder binary tree traversal can be implemented in a non-recursive way with a stack. For example, suppose that when a 6-node binary tree (with the keys numbered from 1 to 6) is traversed, the stack operations are: push(1); push(2); push(3); pop(); pop(转载 2020-08-05 16:17:20 · 100 阅读 · 0 评论 -
03-树2 List Leaves
03-树2 List Leaves (25分)Given a tree, you are supposed to list all the leaves in the order of top down, and left to right.Input Specification:Each input file contains one test case. For each case, the first line gives a positive integer N (≤10) which is原创 2020-08-04 15:32:58 · 111 阅读 · 0 评论 -
03-树1 树的同构
03-树1 树的同构 (25分)给定两棵树T1和T2。如果T1可以通过若干次左右孩子互换就变成T2,则我们称两棵树是“同构”的。例如图1给出的两棵树就是同构的,因为我们把其中一棵树的结点A、B、G的左右孩子互换后,就得到另外一棵树。而图2就不是同构的。现给定两棵树,请你判断它们是否是同构的。输入格式:输入给出2棵二叉树树的信息。对于每棵树,首先在一行中给出一个非负整数N (≤10),即该树的结点数(此时假设结点从0到N−1编号);随后N行,第i行对应编号第i个结点,给出该结点中存储的1个英文大写字原创 2020-08-04 15:30:00 · 132 阅读 · 0 评论 -
02-线性结构4 Pop Sequence
02-线性结构4 Pop Sequence (25分)Given a stack which can keep M numbers at most. Push N numbers in the order of 1, 2, 3, …, N and pop randomly. You are supposed to tell if a given sequence of numbers is a possible pop sequence of the stack. For example, if M is原创 2020-07-28 10:45:15 · 101 阅读 · 0 评论 -
02-线性结构3 Reversing Linked List
02-线性结构3 Reversing Linked List (25分)Given a constant K and a singly linked list L, you are supposed to reverse the links of every K elements on L. For example, given L being 1→2→3→4→5→6, if K=3, then you must output 3→2→1→6→5→4; if K=4, you must output 4→原创 2020-07-28 10:09:26 · 120 阅读 · 0 评论 -
02-线性结构2 一元多项式的乘法与加法运算
02-线性结构2 一元多项式的乘法与加法运算 (20分)设计函数分别求两个一元多项式的乘积与和。输入格式:输入分2行,每行分别先给出多项式非零项的个数,再以指数递降方式输入一个多项式非零项系数和指数(绝对值均为不超过1000的整数)。数字间以空格分隔。输出格式:输出分2行,分别以指数递降方式输出乘积多项式以及和多项式非零项的系数和指数。数字间以空格分隔,但结尾不能有多余空格。零多项式应输出0 0。输入样例:4 3 4 -5 2 6 1 -2 03 5 20 -7 4 3 1输出样例原创 2020-07-28 09:51:42 · 336 阅读 · 0 评论 -
02-线性结构1 两个有序链表序列的合并
02-线性结构1 两个有序链表序列的合并 (15分)本题要求实现一个函数,将两个链表表示的递增整数序列合并为一个非递减的整数序列。函数接口定义:List Merge( List L1, List L2 );其中List结构定义如下:typedef struct Node *PtrToNode;struct Node { ElementType Data; /* 存储结点数据 */ PtrToNode Next; /* 指向下一个结点的指针 */};typedef Ptr原创 2020-07-28 09:21:06 · 69 阅读 · 0 评论 -
01-复杂度 Maximum Subsequence Sum
#include<stdio.h>int list[10005];void MaxSubseqSum(int list[],int n);int main(){ int n; scanf("%d",&n); int i; for(i=0;i<n;i++) { scanf("%d",&list[i]); } MaxSubseqSum(list,n); return 0;}void Max.原创 2020-07-30 07:39:44 · 113 阅读 · 0 评论 -
01-复杂度1 最大子列和问题
#include<iostream>using namespace std;int main(){ int n,list; int ThisSum=0;//当前子列和 int MaxSum=0;//最大子列和 cin>>n; for(int i=0;i<n;i++) { cin>>list; ThisSum+=list; if(ThisSum>MaxSum) MaxS.原创 2020-07-30 07:38:02 · 157 阅读 · 0 评论