算法-搜索与图论
树与图的存储树是一种特殊的图,与图的存储方式相同。对于无向图中的边ab,存储两条有向边a->b, b->a。因此我们可以只考虑有向图的存储。
(1) 邻接矩阵:g[a][b] 存储边a->b
(2) 邻接表:123456789101112// 对于每个点k,开一个单链表,存储k所有可以走到的点。h[k]存储这个单链表的头结点int h[N], e[N], ne[N], idx;// 添加一条边a->bvoid add(int a, int b){ e[idx] = b, ne[idx] = h[a], h[a] = idx ++ ;}// 初始化idx = 0;memset(h, -1, sizeof h);
树与图的遍历时间复杂度 O(n+m), n表示点数,m表示边数
(1) 深度优先遍历12345678910int dfs(int u){ st[u] = true; // st[u] 表示点u已经被遍历过 for (int i = h[u]; i != -1; i = ne[i]) { ...
算法-数学知识
试除法判定质数12345678bool is_prime(int x){ if (x < 2) return false; for (int i = 2; i <= x / i; i ++ ) if (x % i == 0) return false; return true;}
试除法分解质因数123456789101112void divide(int x){ for (int i = 2; i <= x / i; i ++ ) if (x % i == 0) { int s = 0; while (x % i == 0) x /= i, s ++ ; cout << i << ' ' << s << endl; } if (x > 1) cout << x ...
算法-数据结构
单链表123456789101112131415161718192021// head存储链表头,e[]存储节点的值,ne[]存储节点的next指针,idx表示当前用到了哪个节点int head, e[N], ne[N], idx;// 初始化void init(){ head = -1; idx = 0;}// 在链表头插入一个数avoid insert(int a){ e[idx] = a, ne[idx] = head, head = idx ++ ;}// 将头结点删除,需要保证头结点存在void remove(){ head = ne[head];}
双链表12345678910111213141516171819202122232425// e[]表示节点的值,l[]表示节点的左指针,r[]表示节点的右指针,idx表示当前用到了哪个节点int e[N], l[N], r[N], idx;// 初始化void init(){ //0是左端点,1是右端点 r[0] = 1, ...
mysql-查询脚本
想要根据排序再分组取第一个可以一个子查询先排序、然后Limit,再根据条件分组。一定一定要Limit,否则再次查询依旧会有问题
工具-CLion
可以创建多个main文件
修改文件cmakelists.txt
前三行不用变,后边需要修改为如下
123456789# 遍历项目根目录下所有的 .cpp 文件file (GLOB_RECURSE files *.cpp)#将所有的cpp文件单独生成可执行文件foreach (file ${files}) string(REGEX REPLACE ".+/(.+)\\..*" "\\1" exe ${file}) add_executable (${exe} ${file}) message (\ \ \ \ --\ ${file}\ will\ be\ compiled\ to\ bin/${exe})endforeach ()
创建选择这个
取消勾选这个