![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
pat题解
无
人间理想xxf
这个作者很懒,什么都没留下…
展开
-
如何判断一棵树是不是完全二叉树? pat1110题思路
算法思路:1.将每个点的值存入固定的数组下标(指的是x的左孩子对对应2x,右孩子对应于2x+1),对应的数组变量(相当于座位)中。2.看最后一个节点的座位编号是不是等于n(n是总的节点个数),如果是,则是完全二叉树,否则不是。...原创 2020-08-09 22:50:15 · 179 阅读 · 0 评论 -
如何使用DFS()遍历树的每个节点而不重复呢?(pat1021题解)
当树以无向图的方式,数组模拟的方式 存储(也就是每一条边当成2条有向边存储时),如何使用dfs()遍历每个节点而不重复呢?示例的代码如下:int dfs(int u,int father )//father用于防止重复搜索的dfs,使得每个叶子节点只可以搜索一次{ int depth=0; for(int i=h[u];i!=-1;i=ne[i]) { int j=e[i] ; if (j==father) continue;//过滤掉父节点,让原创 2020-07-26 18:22:03 · 756 阅读 · 0 评论 -
pat1012题解
通过的代码:#include <iostream>#include <algorithm>#include <stdio.h>#include <vector>#include <unordered_map>#include <cmath>using namespace std;unordered_map <string, vector<int>> grades;vector <int原创 2020-07-18 09:39:14 · 108 阅读 · 0 评论 -
pat1097,选出链表中重复的值
思路:使用静态链表,多一个order的属性,来记录他应该所在的位置。然后按照order来排序。但是:还有一个样例没有通过!!!#include <cstdio>#include <cstring>#include <algorithm>using namespace std;const int maxn=100010;struct node{ int address,data,next; int order;}Node[maxn];b原创 2020-07-13 09:55:22 · 108 阅读 · 0 评论 -
pat甲级1074(反转链表)
分类分析即可。仔细分析不难得出结论。自己写的ac的代码:#include <cstdio>#include <algorithm>using namespace std;const int maxn=1000010;struct Node{ int address,next,data; int flag;//是否有效}node[maxn];bool cmp(Node a,Node b) { return a.flag<b.原创 2020-07-08 21:07:04 · 188 阅读 · 0 评论 -
pat1060题
算法思路:只需要仔细分析各种情况,分好类别即可。#include <iostream>#include <vector>#include <math.h>#include <cstdio>#include <algorithm>#include <string>using namespace std;int n;string fun(string s,int &k){ string ans;原创 2020-05-28 17:26:28 · 76 阅读 · 0 评论 -
pat1091题(少了5分,两个测试集没有过)
还有两个测试集没有通过啊!!!#include <iostream>#include <vector>#include <cstdio>#include <queue>using namespace std;int m,n,l,t;int pixel[1290][130][60];bool have[1290][130][60]={false};struct node{ int x,y,z;}Node;bool judge(int原创 2020-05-10 21:58:09 · 458 阅读 · 0 评论 -
pat1103的代码
未能全部通过,分数是29分。少一分。代码如下,解法思路见书上。#include <iostream>#include <vector>#include <cstdio>using namespace std;int n,k,p;vector<int> fac,temp,ans;int pow(int a){ int x=1; for(int i=0;i<p;i++) { x=x*a; }原创 2020-05-10 12:12:39 · 84 阅读 · 0 评论 -
pat甲级1051题(栈常见使用)(多多做这个题)
算法:我的错误:我设法让这个array数组去等待捕获顺序数组的值。这样反而思维量更加大。不容易实现。正确的做法:将1~n依次入栈,如果这次入栈的元素恰好等于array数组需要的值,才出栈。#include <iostream>#include <cstdio>#include <stack>using namespace std;stack<...原创 2020-05-04 10:16:51 · 130 阅读 · 0 评论 -
pat甲级1098题。堆的应用。判断排序方法采用的是不是堆排序。
算法思路:1 三个数组,分别存放原始数据,最终修改后的数据,以及从最初到最终的不断变化的数据。2.对这个temp数组,一次次判断通过插入排序后的状态是不是等于了最终数组。如果等于了,说明这就是使用的插入排序。3.否则就是使用的排序。对其一次次的调整,观察其是否等于了最终数组。到一定时候停下来,做完下一步调整之后,输出。#include <iostream>#include &...原创 2020-05-02 20:35:04 · 275 阅读 · 0 评论 -
pat甲级1066题(没写出来,本来代码还可以通过一部分的,现在一个也过不了了)
下次有时间了再去找里面的bug吧#include <iostream>#include <algorithm>#include <cstdio>#include <stdio.h>#include <math.h>#include <queue>#include <vector>#include &...原创 2020-04-16 15:27:10 · 120 阅读 · 0 评论 -
pat甲级1099题。(给出一棵树的框架和一个数组,建立一棵二叉查找树,最后输出他的层序遍历)
算法思想:先建立只知道下标的树。静态的。将这个数组从大到小排序。然后对于这棵树,采用中序遍历的办法,去从头到尾抓取这个数组的值。代码如下:#include <iostream>#include <algorithm>#include <cstdio>#include <stdio.h>#include <math.h>...原创 2020-04-16 10:26:08 · 97 阅读 · 0 评论 -
pat甲级1064。这个题目出的好。非常巧妙的解法。(通过输入的数组,构建一棵完全二叉查找树)
题目关键是:通过输入的数组,构建一棵完全二叉查找树。算法:(要注意数据大小非常重要,初始化的时候tree[1000]都会不能全部通过,改成tree[1010]才给我过的)将输入的数组从小到大排序好,放入number数组;弄一个tree[ ]数组,对此数组进行中序遍历。每次遍历就将number数组中的值一次抓一个的放入进这个tree数组中即可。比较巧妙,要多多体会#include ...原创 2020-04-15 15:43:29 · 193 阅读 · 0 评论 -
pat甲级1043题。(求输入的多个数是否是二叉查找树的某种遍历方法。重要)
题目给出一组数据,要我们判断这组数是不是一个二叉查找树的某种遍历。解题办法:用组数,去建一棵二叉查找树,然后再用一个vector来存储这个数的XX遍历。判断原始数组等于不等于这个vector即可。数据结构:vector。树代码如下:#include <iostream>#include <algorithm>#include <cstdio&...原创 2020-04-15 14:17:31 · 90 阅读 · 0 评论 -
pat甲级1053,路径问题,背包问题,深度优先搜索
数据结构静态树。树中有权值以及vector型的孩子。vector来放孩子。hashpath数组。用来放置路径算法使用DFS(),来遍历这棵树。如果参数中的sum,等于题目要求的weight值,同时该节点没有孩子了,就一次输出。#include <iostream>#include <algorithm>#include <cstdio>...原创 2020-04-14 11:49:12 · 128 阅读 · 0 评论 -
pat甲级1004题。树中计算每个层的叶子节点数。
DFS深度遍历即可。比较简单。代码:#include <iostream>#include <algorithm>#include <cstdio>#include <stdio.h>#include <math.h>#include <queue>#include <stack>#include...原创 2020-04-13 21:23:23 · 131 阅读 · 0 评论 -
pat甲级1106题解以及教训
那个minn值必须很大才可以通过。我写成10000都不能通过。这是经常忽略的错误。题解:参考1094。原创 2020-04-13 18:58:12 · 150 阅读 · 0 评论 -
pat甲级,1094(知道孩子编号还原一棵树;找出树中那一层结点最多)
解题关键:用vector还原一棵树。用到的数据结构:哈希表,用来记录每一层对于多少个结点。vector数组算法DFS深度遍历,每到一层,使用哈希表,来使得当层对应的哈希值加一。#include <iostream>#include <algorithm>#include <cstdio>#include <stdio.h&g...原创 2020-04-12 22:06:12 · 291 阅读 · 0 评论 -
PAT甲级1090(树,给出每个节点的父亲,来还原一棵树;求树的最大深度)
解题关键:给出每个节点的父亲,来还原一棵树;求树的最大深度数据结构1 vector用来存放每个父亲节点下面的孩子,孩子个数可以增加。vector<int> node[100000];算法1 递归。反复的对节点进行DFS遍历。携带参数level和节点的下标。2.在main函数的输入中,输入父亲节点下标,然后设置这个节点的孩子的下标为 i 。这个i 是每输入一次就加一...原创 2020-04-12 21:21:53 · 541 阅读 · 0 评论 -
pat A 1086
我是这么写的,奈何实在不能通过???!!!!找了一个上午没找出来!先放过!下面是未通过的,我写的。`#include <iostream>#include <algorithm>#include <cstdio>#include <stdio.h>#include <math.h>#include <queue>...原创 2020-04-11 12:36:31 · 99 阅读 · 0 评论 -
PAT A1118做题分析
我出错的地方:试图把树给并起来。这里鸟有编号,正确做法应该是把鸟并起来。而不是树。思路分析用并查集的办法。cnt[i]数组保存以i为FindFather结点的集合里面的鸟的个数,exist[i]表示鸟的id——i在输入的鸟的序号里面是否出现过,遍历cnt数组并累加所有不为0的个数即可得知有多少棵树,累加所有出现过的鸟的id的cnt的值即可得知鸟的个数代码如下: for(i...原创 2020-04-10 11:14:25 · 195 阅读 · 0 评论 -
PAT A1114题目记录。以及出错的地方
我在初始化的地方错了,后面找了好久才找出来。呜呜呜#include <iostream>#include <algorithm>#include <cstdio>#include <stdio.h>#include <math.h>#include <queue>using namespace std;int ...原创 2020-04-09 21:11:13 · 316 阅读 · 0 评论