深度优先搜索 深度优先搜索算法(Depth First Search):英文缩写为 DFS,是一种用于搜索树或图的算法。所谓深度优先,就是说每次都尝试向更深的节点走。深度优先搜索采用了回溯思想,该算法沿着树的深度遍历树的节点,会尽可能深的搜索树的分支。 回溯:会搜出每一种可能的路线(求路径,通常N<20) 不回溯:会搜出每一个能走的点(求能否到达) 12345678910111213141516171 2022-05-02 C++算法 #cpp #DFS
Clion刷题攻略-配置Cmake 使用Clion刷题,在一个项目中创建多个main函数,每一个文件对应一道题目,将Clion作为题目管理系统使用,并且cpp文件允许使用中文名,exe文件统一输出到runtime目录,防止污染根目录,CmakeLists文件如下: 12345678910111213141516171819202122232425262728293031323334353637cmake_minimum_requir 2022-04-29 C++算法 #Clion #cpp
容器填充函数 1 fill() 按元素填充 用于将容器或数组的指定范围内的元素赋值为指定值(按元素类型填充)。 属于 C++ STL 算法(<algorithm> 头文件)。 123456// 从起始地址到结束地址的下一位置全部赋为目标值fill(起始地址, 结束地址下一位, 值);fill(a, a + n, -1); // 一维数组fill(a[0], a[0] + n * n, -1); 2022-04-27 C++算法 #cpp #fill #memset
STL学习指北 1 STL 概述 1.1 简介 STL是Standard Template Library的简称,中文名标准模板库,惠普实验室开发的一系列软件的统称。它是由Alexander Stepanov、Meng Lee和David R Musser在惠普实验室工作时所开发出来的。从根本上说,STL是一些“容器”的集合,这些“容器”有list,vector,set,map等,STL也是算法和其他一些组件的集 2022-04-22 C++算法 #cpp #STL
链表 1 单链表 链表是一种物理存储单元上非连续、非顺序的存储结构,插入和删除速度快,并且不需要像数组一样预先开辟空间链表结构可以充分利用计算机内存空间,实现灵活地内存动态管理。 链表由一系列结点组成,每个结点包括两个部分: 存储数据元素的数据域 存储下一个结点地址的指针域 1.1 链表的创建 1.定义结构体存储结点信息 1234struct node { int data; / 2022-04-18 C++算法 #cpp #数据结构 #链表
二分查找(唯一值) 思路 在 n 个元素有序的(升序)整型数组 nums 中查找目标值 target,如果目标值存在返回下标,否则返回 -1。 数组为有序数组 数组中无重复元素 一旦有重复元素,使用二分查找法返回的元素下标可能不是唯一的 根据循环不变量规则,二分查找的过程中,想清楚区间的定义,区间的定义就是不变量,保持不变量,在 while 寻找中每一次边界的处理都要坚持根据区间的定义来操作。二分区间的定义一般为 2022-04-05 C++算法 #cpp #二分
埃氏筛质数判定 从 2 开始,将每个质数的倍数都标记为非质数,最终剩下未被标记的就是质数。 举例说明(筛选 2~30 的质数): 初始时,默认 2~30 全部为质数。 2 是质数,标记 2 的所有倍数(4, 6, 8…)不是质数。 找到下一个未被标记的数:3,是质数,标记 3 的倍数(6, 9, 12…)不是质数。 接着是 5、7……依此类推,直到 $\sqrt30$ ≈ 5 为止。 12345678bool 2022-03-24 C++算法 #cpp #埃氏筛
C++基础算法 1 模拟枚举 枚举算法是我们在日常中使用到的最多的一个算法,枚举算法的核心思想就是:枚举所有的可能。枚举算法简单粗暴,暴力的枚举所有可能速度可能比较慢,但是总能得出正确答案。 枚举算法的三要素:枚举对象、枚举范围和判定条件 比如密码锁,枚举 000~999 的情况 枚举对象:密码 枚举范围:000~999 判定条件:否密码是否正确(能否打开锁) 2 递归算法 从前有座山,山里有座庙,庙里有个 2022-03-13 C++算法 #cpp #前缀和 #差分 #贪心 #递推 #递归
C++文件读取 如果需要从文件读入数据,并把输出数据保存为文件,需要使用文件读取。 freopen为file reopen,意为文件重新打开,实现重定向标准输入输出 第一个参数为文件名可以修改,输入文件为.in,输出文件为.out 第二个参数,r代表读(read),w代表写(write) 第三个参数,stdin标准输入,stdout标准输出 12freopen("test.in", &qu 2022-03-07 C++算法 #cpp
常见排序总结 1 冒泡排序 从左往右相邻的数两两比较,如果左边大于右边则交换,每一轮冒泡会选出一个未排序数字中的最大值放到最后,每一轮确定一个数字的最终位置,排序完n个数字需要n-1轮。 外层循环通过 i 控制遍历次数,最大到 n-1。每轮比较中最大的元素都会被“冒泡”到数组的末尾,因此内层循环的范围是 n - i - 1。 swapped 用于记录当前轮次是否有元素交换。如果某轮中没有发生交换,意味着数组已 2022-03-02 C++算法 #cpp #排序 #快排 #归并