拓扑序列
拓扑序列 定义:拓扑序列是图中的顶点的线性排序,使得从顶点u到顶点v的每个有向边u->v ,在拓扑序列中u都在v前面 不是所有的有向图都是有拓扑序的,只有有向无环图才有拓扑序,所以有向无环图又被称为拓扑图 有向无环图的拓扑序不是唯一的 拓扑序列的求法 对于拓扑序列而言,入度为0的点一定是排在前面的对一个图BFS一遍,BFS过程中更新每个点的入度,如果一个点的入度为0,那么就将其加入
链表
链表数组模拟链表 所需变量123456int e[N],ne[N],idx// head 代表头指针// e[N] 代表节点元素的值// ne[N] 代表节点元素的next指针,即其所指向的下一个节点的下标// idx 代表目前已经已经用到哪个节点了 初始化操作 12head = -1; //初始时头指针指向NULLidx = 0; 将x插到头节点 1234e[idx] = x;ne[idx
树和图的存储和遍历
树和图的存储和遍历树和图的存储 树是一种特殊的图(无环连通图),因此可以把树当作图来处理 图分为有向图(a->b)和无向图(a-b),但我们在算法题中如果遇到无向图,就直接(a->b)和(b->a)都建立,因此无向图就是特殊的有向图。 存储方式 (1)邻接矩阵 g[N][N] g[a][b] = 0 代表 节点a->b没有边 g[a][b] = 1
队列
队列 元素先进先出,从队尾入队,从队首出队。只允许在最后面添加元素,只允许在最前面删除元素。 queue 初始化队列queue<int> q 返回队首和队尾元素q.front() q.back() 尾部增加和删除一个元素 q.push() q.pop() 队列长度和是否为空q.size() q.empty 队列模拟12345678910111213141516171819int q
dfs(爆搜)
dfs(爆搜) 和 全排列dfs递归图解 递归就是把一个大问题变成中问题再变成一个很小的问题进行解决 如果在分解问题时,可能出现一个大问题包括很多个中问题的情况,此时就要在递归外面加上for循环 1234567891011121314151617181920212223242526272829303132333435363738394041int n;int path[N];int st[N]
二分查找
二分查找二分算法解析二分的判断条件通常是通过列出有关要二分的量和其他变量之间的关系方程: 暴力解法要循环所有可能的边长值 通过二分来一步步得缩小查找的区间 二分的核心就是通过某些性质使得可以缩小查找区间来减少时间复杂度 二分步骤: 先写一个check函数(判断条件要具有二段性,并且答案一定是二段性的分界点) 判定在check的情况下(true和false的情况下),如何更新区间。 在chec
String
字符串操作stl函数方法 获取字符串长度s.size() 和 s.length() 插入s.push_back() 在末尾插入s.insert(pos,'c') 在指定位置插入s.append(str) 在s字符串结尾添加str字符串 123s.push_back('a')s.insert(s.begin(),'1')s.append(&q