
基本算法
hongiii
生命诚可贵
展开
-
搜索 记录
目录全排列走迷宫(dfs)走迷宫(层层递进-bfs)bfs中的标记 全排列 void dfs(int step) { if(step == n) { for(int i = 0; i < n; i++) printf("%d ", a[i]); printf("\n"); return; } ...原创 2019-03-20 18:04:45 · 407 阅读 · 0 评论 -
排序小结(简易桶排序、冒泡、快排)
目录简单桶排序冒泡排序快速排序 简单桶排序 基本思想:用数组存储元素出现的次数,book[i]的值表示元素i出现的次数。 假设桶的数目为MMM,需要排序的元素有NNN个,那么算法时间复杂度为O(M+N)O(M+N)O(M+N)。 例子: int main() { int n, num, book[1001] = {0}; scanf("%d", &n); for(i...原创 2019-03-18 13:04:53 · 174 阅读 · 0 评论 -
最短路(Floyd、Dijkstra、Bellman-Ford、队列优化的Bellman-Ford)
目录多源最短路 Floyd-Warshall单源最短路径 Dijkstra解决负权边 Bellman-FordBellman-Ford的队列优化最短路算法对比 多源最短路 Floyd-Warshall 思路:如果要让任意两点i、j之间的距离变短,只能引入第三个点k,通过这个顶点k中转即i->k->j,才可能缩短i到j的路程。Floyd算法就是每次增加一个允许通过的中转点,来求所有顶点的...原创 2019-03-25 16:05:14 · 300 阅读 · 0 评论 -
乱炖 | 最小生成树、割点割边、最大二分匹配
目录图的最小生成树 Kruskal再谈-图的最小生成树 Prim图的割点如何求割点?图的割边如何求割边?二分图附加考题(主元素问题) 图的最小生成树 Kruskal 思路:让边的总长度之和最短,首先选择最短的边,其次选择次短的……,直到选择了n-1条边为止。(注意选边不能造成回路) 难实现的是:判断两个顶点是否已经连通。(可以使用广搜或者深搜,但这样效率低)可以使用已经学习的并查集,把所有的顶点放...原创 2019-03-29 19:30:20 · 761 阅读 · 0 评论 -
树
目录树之旅二叉树并查集 树之旅 树是指任意两个结点间有且只有一条路径的无向图(只要是没有回路的连通无向图就是树)。 深度是从根到这个结点的层数(根为第一层) 二叉树 二叉树是一种特殊的树,每个结点最多有两个儿子。 更严格的递归定义:二叉树要么为空,要么由根节点、左子树和右子树组成,而左子树和右子树分别是一棵二叉树。 满二叉树:如果二叉树的每个节点都有两个儿子,这样的树叫满二叉树(深度为hhh且结点...原创 2019-03-27 14:46:26 · 262 阅读 · 0 评论 -
冒泡排序及优化
冒泡排序及其优化基础写法优化优化1优化2优化3参考 基础写法 冒泡排序思想:泡泡一直向上冒,冒到不能冒的位置。即每次比较两个相邻元素,如果顺序不对就交换,这样一轮交换就能确定当前最大/小值。 假设数组array[1...n]array[1...n]array[1...n],按照从小到大排序,如果第1个元素大于第2个元素,则交换两个元素,一直到第n-1个元素和第n个元素比较,那么一轮结束,第n个元素...原创 2019-08-09 16:48:37 · 569 阅读 · 1 评论