C++核心编程资料 *作用:**函数名可以相同,提高复用性同一个作用域下函数名称相同函数参数类型不同或者个数不同或者顺序不同函数的返回值不可以作为函数重载的条件//函数重载需要函数都在同一个作用域下{cout
Prim算法求最小生成树 给定一张边带无权的无向图G = (V, E), n = |V|, m = |E|。由V中全部n个顶点和E中n - 1条边构成的无向连通子图被称为G的一课生成树。边的权值之和最小的生成树被称为无向图的最小生成树。
Dijkstra算法求最短路 1.初始化dist[1] = 0,其余节点的dist值为无穷大。2.找出一个未被标记的、dist[x]最小的节点x,然后标记节点x。3.扫描节点x的所有出边(x,y,z),若dist[y] > dist[x] + z,则使用dist[x] + z更新dist[y]。4.重复上述2~3两个步骤,直到所有的节点都被标记。
树与图的存储之邻接表法 ne[M] : 表示 与 第 idx 条边 同起点 的 下一条边 的 idx。对于无向图中的边ab,存储两条有向边a->b, b->a。h[N] : 表示 第 i 个节点的 第一条边的 idx。e[M] : 表示 第idx 条边的 终点。树是一种特殊的图,与图的存储方式相同。因此我们可以只考虑有向图的存储。idx : 边的下标索引。i : 节点的下标索引。
C++:to_string与stoi函数 stoi()函数如果传入的字符串s中含有不是数字的字符,则只会识别到从开头到第一个非法字符之 前,如果第一个字符就是非法字符则会报错。头文件:#include < cstring> 或 #include 参数的类型可以是int,long, double ,long long。头文件:#include < cstring>
数组模拟队列 用一个数组 q 保存数据。用 hh 代表队头,q[hh] 就是队头元素, q[hh + 1] 就是第二个元素。用 tt 代表队尾, q[tt] 就是队尾元素, q[tt + 1] 就是下一次入队,元素应该放的位置。[hh, tt] 左闭右闭,代表队列中元素所在的区间。
结构体实现链表 链表是一种物理存储单元上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。链表由一系列结点(链表中每一个元素称为结点)组成,结点可以在运行时动态生成。每个结点包括两个部分:一个是存储数据元素的数据域,另一个是存储下一个结点地址的指针域。因此我们可以通过结构体,结构体指针来实现一个单链表,包括基本的增删查改。
数组模拟栈 众所周知,栈是一种后入先出的数据结构,与队列不同,队列是一种先入先出的数据结构,二者虽有差异,但是有许多相似之处。对后面知识的学习也起到承上启下的作用。本文主要介绍用数组模拟栈。1.入栈 push_back();此时要判断栈是否溢出。2.出栈 pop_back();此时要判断栈是否为空。4.判断栈是否为空。
C++:团体程序设计天梯赛-练习集 L1-012 计算指数 真的没骗你,这道才是简单题 —— 对任意给定的不超过 10 的正整数 n,要求你输出 2 ^n。n不超过10,即2^n不会超过int的最大范围,可以直接使用pow函数来求答案。在一行中按照格式 2^n = 计算结果 输出 2 ^n 的值。输入在一行中给出一个不超过 10 的正整数 n。L1-012 计算指数。
C++ stl容器详解 上面这个定义其实相当于是一维数组name[SIZE],只不过,其长度可以根据需要进行变化,比较节省空间,说通俗了就是“变长数组”。 和一维数组一样,这里的 typename 可以是任何基本类型,例如 int、double、char、结构体等,也可以是STL标准容器,例如vector、set、queue等。需要注意的是,如果typename也是一个STL容器,定义的时候要记得在 >> 符号之间加上空格,因为一些使用C++11之前标准的编译器会把它视为移位操作,导致编译错误。
C++:洛谷 P1177 【模板】快速排序 快速排序是信息学竞赛的必备算法之一。对于快速排序不是很了解的同学可以自行上网查询相关资料,掌握后独立完成。(C++ 选手请不要试图使用 STL,虽然你可以使用 sort 一遍过,但是你并没有掌握快速排序算法的精髓。第 11行为一个正整数 N,第 2 行包含 N 个空格隔开的正整数 ai ,为你需要进行排序的数,数据保证了 Ai 不超过 10^9。将给定的 N 个数从小到大输出,数之间空格隔开,行末换行且无空格。利用快速排序算法将读入的 NN 个数从小到大排序后输出。
C++:洛谷 P1102 A-B 数对 的个数,可以先对数组排序,用二分查找找到第一个数到当前这个数前面的一个数区间内的A - C,由于A - C在当前区间内的个数不唯一,因此两次二分查找分别找到左边第一次出现的位置和右边第一次出现的位置,他们的下标之差加1即为当前区间A - C的个数,依次遍历每个区间即可求得所有值为A - C的个数,即所有满足A - B = C的数对的个数。由于我们要计算出所有满足 A - B = C 的数对的个数,所以转换为找到值为。时间复杂度O(nlogn)
C++:团体程序设计天梯赛-练习集 L1-011 A-B 输入在2行中先后给出字符串A和B。两字符串的长度都不超过10^4 ,并且保证每个字符串都是由可见的ASCII码和空白字符组成,最后以换行符结束。本题要求你计算A−B。不过麻烦的是,A和B都是字符串 —— 即从字符串A中把字符串B所包含的字符全删掉,剩下的字符组成的就是字符串A−B。在一行中打印出A−B的结果字符串。
C++:团体程序设计天梯赛-练习集 L1-010 比较大小 在一行中将3个整数从小到大输出,其间以“->”相连。本题要求将输入的任意3个整数从小到大输出。输入在一行中给出3个整数,其间以空格分隔。L1-010 比较大小。
C++:团体程序设计天梯赛-练习集 L1-009 N个数求和 依次求出每相邻分母的最小公倍数,最后得到所有数据分母的最小公倍数,然后依次更新分子,注意这种做法要开long long不然测试点三会爆int。