
编程
lnplnp_
这个作者很懒,什么都没留下…
展开
-
A*寻路算法C++简单实现——修复bug版
参考文章:https://blog.youkuaiyun.com/u012234115/article/details/47152137https://www.cnblogs.com/zhoug2020/p/3468167.html代码主要参考第一篇,修复该篇博客算法里的小bug该篇博客主要存在两个bug(可以尝试把地图改成20*20,程序可能直接崩):1、Astar.cpp在判断周围8个...原创 2018-07-18 20:53:06 · 1214 阅读 · 2 评论 -
【C++实现】并查集 6个版本 从入门到优化
#ifndef __UF__H__#define __UF__H__#include<cassert>//只记录id值,和哪个节点联通,效率最低class UF1{private: int *id; int count;public: UF1(int n){ count = n; id = new int[n]; for (size_t i = 0;...原创 2018-09-05 16:45:08 · 236 阅读 · 0 评论 -
【C++实现】第k大元素 时间复杂度为O(n),空间复杂度为O(1)
题目来源:Lintcode解题思路:二基准快速排序,在排序时判断每次找到的标记点下标 p 与 n-k 的大小,若小于n-k,则只需在p的右侧继续递归,若大于 p 则只需在p 的左侧递归,直至 p 与 n-k 相等vs可运行代码#include<ctime>#include<vector>#include<iostream>#include...原创 2018-08-21 22:25:52 · 1302 阅读 · 0 评论 -
【C++实现】归并排序 二分法查找
范围查询(Range)描述 数轴上有n个点,对于任一闭区间 [a, b],试计算落在其内的点数。输入 第一行包括两个整数:点的总数n,查询的次数m。 第二行包含n个数,为各个点的坐标。 以下m行,各包含两个整数:查询区间的左、右边界a和b。输出 对每次查询,输出落在闭区间[a, b]内点的个数。样例 输入5 31 3 7 9 114 6...原创 2018-08-17 09:06:44 · 425 阅读 · 0 评论 -
【C++实现】LightHouse
灯塔(LightHouse)描述 海上有许多灯塔,为过路船只照明。 (图一) 如图一所示,每个灯塔都配有一盏探照灯,照亮其东北、西南两个对顶的直角区域。探照灯的功率之大,足以覆盖任何距离。灯塔本身是如此之小,可以假定它们不会彼此遮挡。 (图二) 若灯塔A、B均在对方的照亮范围内,则称它们能够照亮彼此。比如在图二的实例中,蓝、红灯塔可照亮彼此,蓝、绿灯塔则不...原创 2018-08-19 20:07:26 · 661 阅读 · 0 评论 -
【C++实现】LFU缓存
#include<iostream>#include<unordered_map>#include<algorithm>using namespace std;//调试用//void printList(int obj)//{// cout << obj << "\t";//}//void printFun(u...原创 2018-08-13 22:30:23 · 1382 阅读 · 0 评论 -
【C++实现】动态规划求解 LCS 最长公共子串问题
传统递归,时间复杂度O(2^n)本demo时间复杂度O(n*m) 空间复杂度O(n*m)#include<iostream>#include<vector>using namespace std;#define max2(a,b) ((a)>(b)?(a):(b))vector<vector<int>> dp;vector...原创 2018-08-16 00:12:21 · 582 阅读 · 0 评论 -
【C++实现】五大常用算法之二(上):BFS算法(实例:接金币)
小赛非常喜欢玩游戏,最近喜欢上了一个接金币的游戏。在游戏中,使用帽子左右移动接金币,金币接的越多越好,但是金币掉到地上就不能再接了。为了方便问题的描述,我们把电脑屏幕分成11格,帽子每次能左右移动一格。现在给电脑屏幕如图标上坐标:也就是说在游戏里,金币都掉落在0-10这11个位置。开始时帽子刚开始在5这个位置,因此在第一秒,帽子只能接到4,5,6这三个位置中其中一个位置上的金币。问小赛在游戏...原创 2018-07-21 17:12:53 · 1438 阅读 · 0 评论 -
【C++实现】五大常用算法之一:分治算法(实例:汉诺塔)
求解思想:大而化小1、问题拆分成子问题2、对子问题求解在汉诺塔游戏中,有三个分别命名为A、B、C得塔座,几个大小各不相同,从小到大一次编号得圆盘,每个原盘中间有一个小孔。最初,所有得圆盘都在A塔座上,其中最大得圆盘在最下面,然后是第二大,以此类推.先上代码#include<iostream>using namespace std;class Move{...原创 2018-07-20 20:40:59 · 3201 阅读 · 0 评论 -
【C++实现】基本排序算法 插入排序——归并排序——快速排序——堆排序
/*排序总结:(基于100w随机数,有序数、重复数测试)1、插入排序适合近乎有序的序列2、归并排序优化:(优化前 120S)1)数据小于15时采用插入排序 10S2)避免频繁动态申请内存 memcpy(dest,src,sizeof(int)*len) 用static 变量 0.2S缺点:需要O(N)的空间复杂度3、快速排序优化:(优化前 如果序列完全有序,则...原创 2018-09-05 16:48:56 · 450 阅读 · 0 评论