自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

辣条不爱辣的博客

阳春白雪的经典虽然是经典,大众却不见得喜欢

  • 博客(107)
  • 资源 (3)
  • 收藏
  • 关注

原创 暴力求解-子集生成

本篇介绍子集生成算法:给定一个集合,枚举所有可能的子集。为了简单起见,本节讨论的集合汇总没有重复元素。输入:整数n。输出:对于集合{0,1,.....n-1},枚举所有可能的子集。运行结果:增量构造法。第一种思路是一次选出一个元素放到集合中。void print_subset_add(int n,int *A,int cnt){ //增量构造法 //...

2018-10-31 18:52:53 173

原创 暴力求解-枚举排列(二)

通过上一篇的内容,我们可以得到一颗递归解答树。假设n=4.序列为{1,2,3,4},可以用一颗树显示出了。这颗树和前面介绍的二叉树不同。第0层(根)结点有n个子结点,第1层结点各有n-1个子结点,第2层结点各有n-2个子结点,第3层结点各有n-3个子结点,....,第n层结点都没有子结点(即都是叶子),而每个叶子对应于一个排列,共有n!个叶子。由于这棵树展示的是从什么都没做逐步生成完整解的过程...

2018-10-31 15:57:58 178

原创 暴力求解-枚举排列(一)

很多问题都可以暴力解决,不用动太多脑筋,把所有可能性列出来,然后一一试验。尽管这样的方法显得很笨,但却常常是行之有效的。有没有想过如何打印所有排列呢?输入整数n,按字典序从小到大的顺序输出前n个数的所有排列。前面讲过,两个序列的字典序大小关系等价于从头开始第一个不相同位置处的大小关系。例如,(1,3,2) < (2,1,3),字典序最小的排列是(1,2,3,4,...,n),最大的排列是...

2018-10-31 14:23:11 512

原创 数据结构-分数类(二)

本篇主要讲解分数类的加减乘除、比较大小等操作的实现。回顾一下上一篇讲解的内容,给出分数类的存储结构定义:struct Fraction{ friend Fraction operator - (Fraction, Fraction); friend Fraction operator + (Fraction, Fraction); LL a, b; ...

2018-10-31 10:39:02 472 2

原创 数据结构-分数类(一)

分数代表整体的一部分,或更一般的,任何数量化相等的一部分。分数是一个整数a和一个正整数b的不等于整数的比。在一般的数值计算中,一般把分数计算为实数表示然后进行计算,但是有些对精度要求特别高的计算过程中,我们就需要用到分数了。一个简单的小例子,输入分数 a/b , c/b,输出结果 a/b * c/b,要求用输出用分数表示。输入:整数a,b,c,d输出:分数相乘的结果。运行结...

2018-10-31 10:06:08 720

原创 位运算

程序中的所有数在计算机内存中都是以二进制的形式存储的。位运算就是直接对整数在内存中的二进制位进行操作。这篇文章就介绍一下C语言中简单的位运算操作。按位与:a & b相同位的两个数字都为1,则为1;若有一个不为1,则为0。0010111100---------------00100按位或:a | b相同位只要一个为1即为1。0010111100...

2018-10-30 20:01:56 137

原创 数论-数学期望

数学期望,简单的说,随机变量X的数学期望EX就是所有可能值按照概率加权的和。例如,一个随机变量有1/2的概率等于1,1/3的概率等于2,1/6的概率等于3,则这个随机变量的数学期望为1*1/2 + 2*1/3 + 3*1/6 = 5/3.非正式场合中,可以说这个随机变量在平均情况下等于5/3,在解决和数学期望相关的题目时,可以先考虑直接使用数学期望的定义求解:计算出所有可能的值,以及所对应的概...

2018-10-30 19:35:04 3797

原创 数论-Catalan数、Bernoulli数

在某公司的笔试中碰到了一道题,隐约感觉以前学过但是记不得。后来一查原来是Catalan数.....例题:给一个凸n边形,用n-3条不相交的对角线把它分成n-2个三角形,求不同的方法数目。例如,n=5时,有5种剖分方法。设答案为f(n),按照某种顺序给凸多边形的各个顶点编号为V1,V2,。。。Vn,既然分成的是三角形,边V1Vn在最终的剖分中一定恰好属于某个三角形V1VnVk,所以可以根据k...

2018-10-30 18:41:31 239

原创 数论-Fibonacci数列

先来考虑一个简单的问题,楼梯有n个台阶,上楼可以一步上一阶,也可以一步上两阶,一共有多少种上楼的方法?这是一道计数问题。在没有思路时,不妨试着找规律。n=5时,一共有8种方法。5=1+1+1+1+15=2+1+1+15=1+2+1+15=1+1+2+15=1+1+1+25=2+2+15=2+1+25=1+2+2其中有5种方法第1步走了1阶,3种方法第1步走了...

2018-10-30 15:23:24 302

原创 数论-离散概率

概率分布,是指用于表述随机变量取值的概率规律,事件的概率表示了一次实验中某一个结果发生的可能性大小。若要全面了解试验,则必须知道试验的全部可能结果及各种可能结果发生的概率,即随机试验的概率分布。如果试验变量用变量X的取值来表示,则随机试验的概率分布就是随机变量的概率分布。即随机变量的可能取值及取得对应值的概率。根据随机变量所属类型的不同,概率分布取不同的表现形式。第一个例子是:连续抛3次硬币,...

2018-10-30 14:47:35 1230

原创 数论-编码与解码

两个a、一个b和一个c组成的所有串可以按照字典序编号为:aabc(1),aacb(2),abac(3),...,cbaa(12)任给一个字符串,能否方便的求出它的编号呢?例如:输入acab,则应输出5.下面直接求解一般情况的问题(并不限字母的种类与个数),设输入串为S,记d(S)为S的各个排列中,字典序比S小的串的个数,则可以用递推法求解d(S)。其中边上的字母表示下一个字母,f(...

2018-10-29 20:34:47 279

原创 数论-计数问题

约数的个数。给出正整数n的唯一分解式,求n的正约数的个数。不难看出,n的任意正约数也只能包含p1,p2,p3等素因子,而不能有新的素因子出现。对于n的某个素因子pi,它所求约数中的指数可以是0,1,2,...ai共ai+1种情况,而且不同的素因子之间相互独立。根据乘法原理,n的正约数个数为:小于n且与n互素的整数个数。给出正整数n的唯一分解式 ,求1,2,3,....n中与n互素的...

2018-10-29 19:29:05 577

原创 数论-杨辉三角、二项式定理

组合数C(n,m)在组合数学中占有重要地位。与组合数相关的最重要的两个内容是杨辉三角和二项式定理。如图:另一方面,把(a+b)^n展开,将得到一个关于x的多项式:(a+b)^0 = 1(a+b)^1 = a + b(a+b)^2 = a^2 + 2ab + b^2(a+b)^3 = a^3 + 3a^2b + 3ab^2 + b^3(a+b)^4 = a^4 + 4...

2018-10-29 17:03:42 781

原创 数论-计数与概率基础

排列与组合是基本的计数技巧。本节介绍一些基本的相关知识和方法。加法原理:做一件事情有n个方法,第i个办法有pi种方案,则一共有p1+p2+.....+pn种方案。乘法原理:做一件事情有n个步骤,第i个步骤有pi种方案,则一共有p1p2....pn种方案。乘法原理是加法原理的特殊情况(按第一步骤进行分类),二者都可用于递推,注意应用加法原理的关键是分类:各类比之间必须没有重复,没有遗漏。...

2018-10-29 15:34:10 312

原创 数论-同余与模算数

你需要花多少时间来计算下面这道题目呢?123456789 * 987654321 = ()A. 121932631112635266         B.121932631112635267C.121932631112635268          D.121932631112635269既然是选择题,不必费力把答案完整的计算出来,4个选项的个位数都不相同,因此只需要计算是出答案的...

2018-10-29 12:27:40 1312

原创 数论-扩展欧几里德算法

找出一对整数(x,y),使得ax+by=gcd(a,b)。注意,这里的x和y不一定是正数,也可能是负数或者0.例如,gcd(6,15)=3,6*3-15*1=3,其中,x=3,y=-1.这个方程还有其他解,如x=-2,y=1。输入:整数a,b输出:整数x,y。运行结果:用数学归纳法并不难证明算法的正确性。此处略去。注意在递归调用时,x和y的顺序变了,而边界也是不难得出的gc...

2018-10-28 19:30:19 168

原创 数论-素数筛

有时候我们需要判断大量的数是否是素数,如果一个一个的判断时间效率太低了,怎么办呢?我们需要学会用Eratosthenes筛法构造1-n的素数表。输入:整数n。输出:1-n的所有素数。运行结果:筛法的思想特别简单:对于不超过n的每个非负整数p,删除2p,3p,4p,...,当处理完所有数之后,还没有被删除的就是素数。如果用vis[i]表示i已经被删除,筛法的代码可以写成:...

2018-10-28 15:25:16 150

原创 数论-辗转相除法、唯一分解定理

没有数学就没有算法;没有好的数学基础,也很难在算法上有所成就。数论被数学王子高斯誉为整个数学王国的皇后。数论是纯粹数学的分支之一,主要研究整数的性质。从研究方法来看,数论大致可分为初等数论和高等数论。初等数论是用初等方法研究的数论,它的研究方法本质上说,就是利用整数环的整除性质,主要包括整除理论、同余理论、连分数理论。高等数论则包括了更为深刻的数学研究工具。我们在这里主要学习初等数论。...

2018-10-28 12:46:34 814

原创 图-网络流-二分图匹配

网络流的一个经典的应用是二分图匹配。在图论中,匹配是指两两没有公共点的边集,而二分图是指:可以把结点集分成两部分X和Y,使得每条边恰好一个端点在X,另一个端点在Y。换句话说,可以把结点进行二染色(bicoloring),使得同色结点不相邻。为了方便叙述,在画图时一般把X结点和Y结点画成左右两列。可以证明:一个图是二分图,当且仅当它不含长度为奇数的圈。无权图:需要求出包含边数最多的匹配,即二分图...

2018-10-27 21:31:34 833

原创 图-网络流-最小费用最大流

下面给网络流增加一个因素:费用。假设每条边除了有一个容量限制外,还有一个单位流量所需的费用(cost)。在总流量最大的前提下,总费用最小的流,即最小费用最大流。在最小费用流问题中,平行边变得有意义了,可能会有两条从u到v 的弧,费用分别为1和2。在没有费用的情况下,可以把两者合并,但由于费用的出现,无法合并这两条弧。再如,若边(u,v)和(v,u)均存在,且费用都是负数。则“同时从u流向v和从...

2018-10-27 20:28:54 631

原创 图-网络流-最小割最大流定理

有一个和最大流密切相关的问题:最小割。把所有顶点分成两个集合S和T=V-S,其中源点s在集合S中,汇点t在集合T中。如果把“起点在S中,终点在T中”的边全部删除,就无法从s到达t了,这样的集合划分(S,T)称为一个s-t割,它的容量定义为:c(S,T)=,即起点在S中,终点在T中的所有边的容量和。还可以从另外一个角度看待割。从s运送到t的物品必然通过跨越S和T的边,所以从s到t的净流量...

2018-10-27 19:03:16 718

原创 图-网络流-最大流问题

网络流是一种类比水流的解决问题的方法,与线性规划密切相关。网络流的理论和应用在不断发展,具有增益的流、多终端流、多商品流以及网络流的分解与合成等新课题。网络流的应用已遍及通讯、运输、电力、工程规划、任务分派、设备更新以及计算机辅助设计等众多领域。网络流是一个适用范围相当广的模型,相关的算法也非常多。尽管如此,网络流中的概念、思想和基本算法并不难理解。首先看一下最大流问题。对于一条边(u...

2018-10-27 18:38:36 1649

原创 图-欧拉路径、欧拉回路

有一条名为Pregel的河流经过Konigsberg城。城中有7座桥。把河中的两个岛与河岸连接起来。当地居民热衷于一个难题:是否存在于一条路线,可以不重复地走遍7座桥。这就是著名的七桥问题。它由大数学家欧拉首先提出,并给出了完美的解答。欧拉首先把图中的七桥问题用图论的语言改写成图,则问题变成了:能否从无向图中的一个结点出发走到一条道路,每条边恰好经过一次。这样的路线称为欧拉道路。也可以形象的称...

2018-10-26 19:36:59 364

原创 图-最短路径-BellmanFord算法

当负权存在时,连最短路都不一定存在了。尽管如此,还是有办法在最短路存在的情况下把它求出来。在介绍算法之前,请读者确认这样一个事实:如果最短路存在,一定存在一个不含环的最短路。理由如下:在边权可正可负的图中,环有零环,正环和负环三种。如果包含零环或正环,去掉以后路径不会边长:如果包含负环,则意味着最短路不存在(为了取得最小值不断在环上走,权值不断减小,但是永远得不到最小的值,最后死循环)。既...

2018-10-26 15:31:42 189

原创 三维几何-凸包

和二维情形类似,给定三维空间的一些点,包含它们的最小凸多面体称为这些点的凸包。三维凸包的求法有很多,常用的有暴力法,卷包裹法和增量法。暴力法。枚举每三个点组成的有向三角形(实际对应一个半空间),判断是否所有点都在这个三角形的同侧(即半空间的内部)。如果是,则这个三角形是凸包中的一个面。否则就不是。判断一个点在三角形的那一侧需要一次叉积和一次点积(也可以理解为一次混合积),因此一共需要O(n^4...

2018-10-25 19:40:04 3722

原创 三维几何-多面体

多面体是指4个或者是4个以上多边形所围城的立体。在传统意义上,它是一个三维的多胞形,而在更新的意义上它是任何维度的多胞形的有界或无界推广。四面体的体积。已知四边形的4个顶点A,B,C,D。根据叉积和点积的定义不难得出四面体的带符号体积为V=1/3 *S*h = 1/6(AB * AC) *h = 1/6 ((AB*AC) *AD)其中AB,AC,AD呈右手系时为正。括号内的部分也称为混...

2018-10-25 16:03:49 1110

原创 三维几何-三角形

三角形的有向面积的二倍。和二维情形一样,注意求出叉积后要取长度。​double Area2(const Vector3 &A,const Vector3 &B, const Point3 &C){ return Length(Cross(B-A, C-A));}判断点是否在三角形内。先判断点是否在三角形所在平面上,然后利用简单的面积关系即可。这里...

2018-10-25 15:23:19 605

原创 三维几何-平面

平面的表示。通常用点法式(p0,n)来描述一个平面。其中点p0是平面的一个点,向量n是平面的法向量。每个平面把空间分成了两个部分,我们可以用点法式表示其中一个半空间。具体是哪一个呢?是这个法向量所背离的那一个(即法向量指向远离半空间的方向)。既然是法向量,n就垂直于平面上的所有直线。换句话说,平面上的任意点p满足Dot(n,p-p0)=0.设点p的坐标为(x,y,z),p0的坐标为(x...

2018-10-25 15:23:08 1343

原创 三维几何-点和直线

直线的表示。直线仍然可以用参数方程(点和向量)来表示,并且射线和线段仍然可以看成参数有取值范围限制的直线,并且点到直线的投影和二维情形一样。点到直线/线段的距离。仍然可以用面积法(注意三维叉积是向量,要用Length函数而不是fabs)。点P到直线AB的距离:double DistanceToLine(const Point3 &P, const Point3 &...

2018-10-25 15:22:44 600

原创 三维几何-基础

数学上,三维几何是3维欧式空间几何的传统名称。因为实际上这大致就是我们生活的空间。我们在前面介绍过向量运算,其中很多内容也适合三维几何,如点+向量=点,向量+向量=向量,点+点没有定义。首先是辅助宏的定义:const double eps = 1e-10;const double PI = acos(-1); // πconst double TWO_PI = 2*PI;co...

2018-10-25 10:22:24 738

原创 二维几何-点集直径

点集直径,即给定点之间的最大距离。两两枚举的方法需要O(n^2)时间,并不是很优秀。有一个办法可以更快的求出点集的直径。首先求点集的凸包,则最大距离一定来自于凸包上的两个顶点。由于凸包上的点的个数往往比原始点少很多,就算还是两两枚举,速度也比直接枚举快很多,当然最坏情况下时间复杂度仍是O(n^2),需要继续改进。假设我们已经找到了直径,端点为Pi和Pj,现在我们分别从Pi和Pj出发各作一条...

2018-10-25 10:09:03 1313

原创 二维几何-三角形

三角形是由不在同一直线的三条线段首尾相接顺次连接所组成的封闭图形。求ABC三点组成的三角形面积。double Area(Point A, Point B, Point C){ return fabs(Cross(B-A, C-A)) / 2;}三角形面积公式: 1/2 * a * b * sin(c)内心:三个内角的三条角平分线相交于一点,这个点叫做三角形的内心。这个...

2018-10-24 16:12:27 604

原创 二维几何-平面区域

当平面上有很多线段时,组成的图形往往不止一个多边形,而是一个平面直线图(PSLG),它代表一个平面区域划分,其中一个区域是一个多边形。如果只有点和边的信息,如何找出所有区域呢?为方便起见,我们把每条边u-v拆成两条半边 u-v 和 v-u.并且每条半边只与它左边的面相邻。接下来,我们从一条半边出发遍历,每次像卷包裹算法那样找一个逆时针转的尽量多的边作为下一条边,直到回到出发的那条半边。程序...

2018-10-24 10:30:35 533

原创 二维几何-半平面交

简单的说,半平面交问题就是给出若干个半平面,求它们的公共部分。其中每个半平面用一条有向直线表示。它的左侧就是它所代表的半平面。在很多情况下,这个半平面交都是一个凸多边形,但也有时候会得到一个无界多边形,甚至是一条直线、线段或者是点。不管怎么样,结果移动是凸的(因为凸集的交是凸的)。当然,半平面交也可以为空。计算半平面交的一个方法是增量法,即初始答案为整个平面,然后逐一加入各个半平面,维护当...

2018-10-23 09:35:51 250

原创 二维几何-凸包

顾名思义,凸包就是把给定点包围在内部的、面积最小的凸多边形,它在计算几何中有着及其重要的作用。这里介绍一下Andrew算法。算法思想:首先把所有点按照x从小到大排序(如果x相同,按照y从小到大排序),删除重复点后得到序列p1,p2....然后把p1和p2放到凸包中。从p3开始,当新点在凸包前进方向的左边时继续,否则依次删除最近加入凸包的点,直到新点在左边。重复这个过程,直到碰到最右边的pn...

2018-10-22 16:55:36 142

原创 二维几何-点在多边形内判定

直观的讲,一个多边形就是二维平面上被一系列首尾相接、闭合的折线段围成的区域。在程序中一般用顶点数组表示。其中各个顶点按照逆时针顺序排列。给定一个多边形和一个点,如何判断该点是否在多边形内?主要有两种方法,一个是射线法,一个是转角法。我们这里主要介绍转角法,因为这个方法比射线法更方便。基本思想就是看多边形相对于这个点转了多少度。我们把多边形每条边的转角加起来,如果是360度,说明在多边形内,...

2018-10-22 16:26:30 474

原创 二维几何-圆、球

圆是任意一点拥有唯一的圆心角。所以在定义圆的时候,可以加一个圆心角求坐标的函数。首先是辅助宏:const double eps = 1e-10;const double PI = acos(-1); // πconst double TWO_PI = 2*PI;const int maxn = 100 + 5;const int INF = 10000;圆的存储结构定义:...

2018-10-22 15:53:13 489

原创 二维几何-多边形

如何计算多边形的有向面积?如果多边形是凸的,可以从第一个顶点出发把凸多边形分成n-2个三角形,然后把面积加起来。double ConvexPolygonArea(Point *p, int n){ double area; int i; area = 0; for(i = 1; i < n-1; i++) area += Cross(...

2018-10-21 21:57:03 238

原创 二维几何-点和直线

这篇文章讲的是二维几何中点和直线的相关问题。直线的参数表示。直线可以用直线上的一点P0和方向向量v表示(虽然这个向量的大小没什么用处)。直线上所有点P满足P=P0+tv。其中t称为参数。如果已知直线上的两个不同点A和B,则方向向量为B-A,所以参数方程为A+(B-A)t。参数方程最方便的地方在于直线、射线和线段的方程形式是一样的。区别仅仅在于参数。直线的t没有范围限制。射线的t>0,...

2018-10-21 21:40:26 734

原创 二维几何-基础

计算机图形学的基础之一就是计算几何。它是伴随到计算机和CAD的应用而诞生的一门学科。它的主要研究内容是几何形体的数学描述和计算机表述。它同计算机辅助几何设计有着十分密切的关系。在1972年,福雷斯特给其下了正式定义:对几何外形信息的计算机表示,分析和综合。这里的几何外形信息指的是那些用来确定某些几何外形的离散数据点或特征多边形。 按照给定的信息,建立一定的数学模型,再通过计算机进行计算,求...

2018-10-21 17:10:12 370

飞机大战-Win32程序开发

运行环境:vs2010 游戏多个关卡,多个boss,多种道具,可玩行还可以吧。跟之前的差不太多。 此游戏为飞机大战,胜利条件为玩家消灭最终boss,失败条件为玩家被消灭。 游戏玩法: 开始界面:点击鼠标进入普通模式,按下空格键进入无敌模式,按下Esc键退出游戏。 游戏界面:玩家鼠标控制飞机的移动与射击,A键发射激光,S键使用防护罩,按下Esc键退出游戏,P键暂停。 --------------------- 作者:辣条不爱辣 来源:CSDN 原文:https://blog.csdn.net/baidu_38304645/article/details/82836535 版权声明:本文为博主原创文章,转载请附上博文链接!

2018-12-25

基于MFC实现游戏-飞机大战

用MFC做了一个飞机大战的游戏,游戏的基本要素都有了。有多个关卡,还有道具,每个关卡都有最终boss,还有无敌模式等。 --------------------- 本文来自 辣条不爱辣 的CSDN 博客 ,全文地址请点击:https://blog.csdn.net/baidu_38304645/article/details/82824001?utm_source=copy

2018-09-23

MFC实现简易绘图软件

使用MFC实现简易的绘图软件,基本上是使用鼠标拖动来绘制的图形,有直线,连续直线,矩形,圆,模拟曲线,多边形,圆弧 --------------------- 本文来自 辣条不爱辣 的CSDN 博客 ,全文地址请点击:https://blog.csdn.net/baidu_38304645/article/details/82821730?utm_source=copy

2018-09-23

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除