算法
算法
1hdmx1t
这个作者很懒,什么都没留下…
展开
-
并查集
并查集基本算法需要:一个数组pre[]来记录当前节点的上一层。 int unionsearch(int cur)函数,用来查找cur的根节点。 void join(int x, int y)函数,用来合并x,y两个根节点。#include <iostream>#include <cstdio>#include <map>#include ...原创 2020-02-09 22:24:56 · 80 阅读 · 0 评论 -
bfs见解和基本模板:最短距离和路径
BFS使用队列辅助求解最短距离使用dis二维数组,路径使用fath二维数组,还用使用vis进行是否访问判断。输入4 61 1 1 1 1 11 1 1 1 1 11 1 1 1 1 11 1 1 1 1 1输出长为:80 01 02 03 03 13 23 33 43 5#include <iostream>#include <...原创 2020-02-06 12:55:46 · 220 阅读 · 0 评论 -
素数筛
在我们求一个区间内的素数时,最普通的方法是:int SuShu(int m, int n) { for(int i = m; i &amp;amp;amp;amp;lt;= n; i++) { int flag = 0; for(int j = 2; j &amp;amp;amp;amp;lt;= sqrt((double)i); j++) { if(i%j==0) flag = 1; ..原创 2018-12-21 09:57:13 · 114 阅读 · 0 评论 -
数据离散化思想
原文地址一:为离散化?离散化,就是把无限空间中有限的个体映射到有限的空间中去,以此提高算法的时空效率。比如给你n个数:98998988,32434234,433234556,32434234,8384733,……让你统计其中每个数出现的次数,传统的做法有好几种,比如一遍一遍的扫过去,比对叠加,这样算法的效率是O(n2),效率低下;再比如先排序,再统计连续的相同的个数,这里的效率已经有所...转载 2019-03-07 15:32:05 · 120 阅读 · 0 评论 -
子集生成
一:增量构造法int arr[1<<10];void print_subset1(int n, int cur) { for(int i = 0; i < cur; i++) cout << arr[i] << " "; cout << endl; int s; if(cur) s = arr[cur-1]+1;//确定...原创 2019-03-25 19:24:55 · 97 阅读 · 0 评论 -
八皇后问题:回溯法
回溯法思想:当把问题分成若干步骤并递归求解时,如果当前步骤没有合法选择,则函 数将返回上一级递归调用,这种现象称为回溯。正是因为这个原因,递归枚举算法常被称为 回溯法,应用十分普遍。题目描述:在棋盘上放置8个皇后,使得它们互不攻击,此时每个皇后的攻击范围为同行同列和同 对角线,要求找出所有解。分析:最简单的思路是把问题转化为“从64个格子中选一个子集”,使得“子集中恰好有8个格...原创 2019-03-26 15:53:47 · 218 阅读 · 0 评论 -
枚举排列
整理自:紫书,https://blog.csdn.net/bengshakalakaka/article/details/78515480枚举排列的算法有两种:一:递归枚举二:STL next_permutation()一:递归枚举 我们先尝试枚举排列1~n的序列:先输出1开头的排列(这一步是递归调用),然后输出以2开头二点排列(也是递归调用),接着以3开头的排列,....原创 2019-03-23 21:32:00 · 436 阅读 · 0 评论