啊哈!算法 练习
结合书籍的一些记录
hongiii
生命诚可贵
展开
-
乱炖 | 最小生成树、割点割边、最大二分匹配
目录图的最小生成树 Kruskal再谈-图的最小生成树 Prim图的割点如何求割点?图的割边如何求割边?二分图附加考题(主元素问题)图的最小生成树 Kruskal思路:让边的总长度之和最短,首先选择最短的边,其次选择次短的……,直到选择了n-1条边为止。(注意选边不能造成回路)难实现的是:判断两个顶点是否已经连通。(可以使用广搜或者深搜,但这样效率低)可以使用已经学习的并查集,把所有的顶点放...原创 2019-03-29 19:30:20 · 721 阅读 · 0 评论 -
树
目录树之旅二叉树并查集树之旅树是指任意两个结点间有且只有一条路径的无向图(只要是没有回路的连通无向图就是树)。深度是从根到这个结点的层数(根为第一层)二叉树二叉树是一种特殊的树,每个结点最多有两个儿子。更严格的递归定义:二叉树要么为空,要么由根节点、左子树和右子树组成,而左子树和右子树分别是一棵二叉树。满二叉树:如果二叉树的每个节点都有两个儿子,这样的树叫满二叉树(深度为hhh且结点...原创 2019-03-27 14:46:26 · 254 阅读 · 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 · 292 阅读 · 0 评论 -
搜索 记录
目录全排列走迷宫(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 · 392 阅读 · 0 评论 -
栈、队列、链表基础
目录队列(先进先出)栈(先进后出)链表队列(先进先出)定义结构体:const int N = 1000+10;struct Queue{ int data[N]; //队列的主体,用来存储内容 int head; //队首 int tail; //队尾};其中,head用来记录队列的队首(即第一位),tail用来记录队列的末尾(即最后一位)的下一个位置。在...原创 2019-03-18 19:37:16 · 254 阅读 · 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 · 164 阅读 · 0 评论