pta
一Nanase一
这个作者很懒,什么都没留下…
展开
-
二叉树遍历及bst
二叉树名词满二叉树树的每一层的节点个数都达到了当层最大。完全二叉树任何一个编号为x的节点,其左孩子编号一定为2x,右孩子一定为2x+1.二叉树遍历二叉树三种遍历顺序前序:中-左-右中序:左-中-右后序:左-右-中二叉树的递归遍历以前序为例:void front(node root){ print(root->num); front(root->lc); front(root->rc);}二叉树的非递归遍历1)前序:用辅助栈,root入栈原创 2020-11-14 10:56:09 · 126 阅读 · 0 评论 -
图算法
存储图可用邻接矩阵和邻接表存储,当图中点个数不超过1000时都可用邻接矩阵。遍历图dfs直接递归int G[max][max];//邻接矩阵int n;//顶点bool vis[max]={false};void dfs(int a){ vis[a]=true; for(int i=0;i<n;i++){ if(G[a][i]!=inf&&vis[i]==false){ dfs(i); }; };}void set_dfs(){ for(原创 2020-11-13 19:54:09 · 132 阅读 · 0 评论 -
数学问题
最大公约数求解a与b的最大公约数:1)a%b2)a = b,b = a%b3)重复直至b==0,则a为最大公约数int gcd(int a,int b){ if(b==0)return a; return gcd(b,a%b);}最小公倍数求解a与b最小公倍数,先求出a与b的最大公约数。设c为a,b最大公约数,则最小公倍数=ab/c.由于ab在计算中可能溢出,因此应写成a/cb int lcm(int a,int b){ int c=gcd(a,b); return (原创 2020-11-06 22:02:30 · 287 阅读 · 0 评论 -
关于堆的构建和调整
堆的定义(以小顶堆为例):给定一个初始序列,在此基础上建堆。每个序列号(从1开始)为i的节点左孩子为2i,右孩子为2i+1.小顶堆即为每个以当前节点为根节点的子树中,最小的值总是根节点的值。因此根据迭代思想,当前节点的值(设为a),与左右两子树相比较,使最小的节点值(设为b)成为根节点,即可保证在当前子树中最小的值一定是根节点。因此堆的整体调整是由下向上的过程。当节点a经过调整位置下沉后,需要进行后续调整直至找到合适的位置或者抵达序列边界为止。因此单个节点的调整是由上而下的过程。代码模板: int原创 2020-10-20 15:57:18 · 1490 阅读 · 0 评论 -
求绝对值
1,int abs(int i) 返回整型参数i的绝对值2,double cabs(struct complex znum) 返回复数daoznum的绝对值3,double fabs(double x) 返回双精度参数x的绝对值4,long labs(long n) 返回长整型参数n的绝对值原创 2020-10-19 19:27:40 · 219 阅读 · 0 评论 -
并查集
并查集的模板都大致相同,做了一题并查集就顺便总结一下学到的东西。代码://记录父节点的数组初始化void resum(int n) { for (int i = 0; i < n; i++) { fcode[i] = i; };}//查询根节点顺便做路径压缩int findf(int a) { int f = a; while (f != fcode[f]) { f = fcode[f]; }; //压缩路径 while (fcode[a] != f) { int原创 2020-10-18 16:37:31 · 67 阅读 · 0 评论 -
L2-013 红色警报
战争中保持各个城市间的连通性非常重要。本题要求你编写一个报警程序,当失去一个城市导致国家被分裂为多个无法连通的区域时,就发出红色警报。注意:若该国本来就不完全连通,是分裂的k个区域,而失去一个城市并不改变其他城市之间的连通性,则不要发出警报。输入格式:输入在第一行给出两个整数N(0 < N ≤ 500)和M(≤ 5000),分别为城市个数(于是默认城市从0到N-1编号)和连接两城市的通路条数。随后M行,每行给出一条通路所连接的两个城市的编号,其间以1个空格分隔。在城市信息之后给出被攻占的信息,即一原创 2020-10-17 20:37:53 · 120 阅读 · 0 评论