本博客只是本人学习程序语言以及算法设计过程中的心得以及笔记,主要参考资料如下: ACM基本培训资料(属于内部资料); ACM、ICPC代码库(吉林大学); 算法导论(MIT神书); 2013年王道论坛计算机考研机试指南以及王道程序员求职宝典(王道论坛); 编程珠玑; 编程之美; 剑指offer; C++primer et.al.主要分成三个阶段: (1)模仿阶段:主要是学习别人的,所以说在第一阶段的博客里面有很多是重复别人的,甚至是直接copy的,在这里我已经做了说明,所以跟你写的代码一样,就担待一些吧~~ (2)理解阶段:对于一些比较难的算法,提出自己的一些见解,便于自己... Read More
posted @ 2013-12-01 11:25
yiyi_xuechen
Views(180)
Comments(0)
Diggs(0)
1 /** 2 哈希表的几个概念: 3 映像:由哈希函数得到的哈希表是一个映像。 4 冲突:如果两个关键字的哈希函数值相等,这种现象称为冲突。 5 6 处理冲突的几个方法: 7 1、开放地址法:用开放地址处理冲突就是当冲突发生时,形成一个地址序列,沿着这个序列逐个深测,直到找到一个“空”的开放地址,将发生冲突的关键字值存放到该地址中去。 8 例如:hash(i)=(hash(key)+d(i)) MOD m (i=1,2,3,......,k(k 16 using namespace std; 17 18 typedef int KeyType; //设关键字域为... Read More
posted @ 2013-12-01 11:14
yiyi_xuechen
Views(324)
Comments(0)
Diggs(0)
1 /** 2 题目描述: Ignatius 被魔王抓走了,有一天魔王出差去了,这可是 Ignatius 逃亡的好机会. 3 魔王住在一个城堡里,城堡是一个A*B*C的立方体,可以被表示成A个B*C的矩 阵,刚开始 4 Ignatius 被关在(0,0,0)的位置,离开城堡的门在(A-1,B-1,C-1)的位置,现 在知道魔王将 5 在T分钟后回到城堡,Ignatius每分钟能从一个坐标走到相邻的六个 坐标中的其中一个. 6 现在给你城堡的地图,请你计算出 Ignatius 能否在魔王回来前 离开城堡 7 (只要走到出口就算离开城堡,如果走到出口的时候魔王刚好回来也算逃 ... Read More
posted @ 2013-12-01 11:13
yiyi_xuechen
Views(175)
Comments(0)
Diggs(0)
1 /** 2 通过一个题目来认识深度优先搜索 3 题目描述: 4 一个N*M迷宫,入口S,出口D,能走的是.,不能走的是X,问从入口进入后能否在T时间内走出迷宫? 5 6 输入: 7 N,M,T分别代表迷宫的长度和宽度以及时间,注意三者输入都是0时,结束 8 9 输出: 10 能走出为YES;不能走出为NO 11 12 样例输入: 13 4 4 5 14 S.X. 15 ..X. 16 ..XD 17 .... 18 3 4 5 19 S.X. 20 ..X. 21 ...D 22 0 0 0 23 24 样例输出: 25 NO 26 YES 27 代码用... Read More
posted @ 2013-12-01 11:12
yiyi_xuechen
Views(240)
Comments(0)
Diggs(0)
1 /** 2 对多边形A1A2A3...An(顺或逆时针都可以,逆时针的话就不用加绝对值了~),设平面上有任意的一点P(0,0),则有: 3 S(A1,A2,A3,... ,An) = abs(S(P,A1,A2) + S(P,A2,A3)+...+S(P,An,A1)) 4 也就是说,假设Ai坐标为(xi,yi),则 5 S(A1,A2,A3,... ,An) =abs(1/2 *(x1y2 - x2y1 + x2y3 - x3y2 + ... + xn-1yn - xnyn-1)) 6 7 输入: 8 n——测试多边形的个数 9 m——当前多边形的点的个数10 x1, y1, x2,.. Read More
posted @ 2013-12-01 11:10
yiyi_xuechen
Views(179)
Comments(0)
Diggs(0)
1 /** 2 给出线段AB以及线段CD,只要判断A、B两点在直线CD的两端,并且C、D两点在直线AB的两端即可。 3 用叉乘进行判断。 4 5 问题描述 6 下面给出的是一个判断线段相交的次数 7 8 输入: 9 n:线段的个数 10 seg.begin.x,seg.begin.y,seg.end.x,seg.end.y:分别表示线段p1p2的点坐标 11 12 输出: 13 n个线段中两两相交的次数 14 15 样例输入 16 2 17 1 0 0 0 18 0 1 0 0 19 样例输出: 20 1 21 */ 22 23 #include 24 using... Read More
posted @ 2013-12-01 11:09
yiyi_xuechen
Views(328)
Comments(0)
Diggs(0)
最大公约数 1 /** 2 最大公约数(GCD,greatest common divisor),欧几里得算法啦~~ 3 */ 4 5 #include 6 using namespace std; 7 8 //递归形式 9 /*int gcd(int a, int b)10 {11 if(b == 0)12 return a;13 else14 return gcd(b, a % b);15 }*/16 17 //非递归形式18 int gcd(int a, int b)19 {20 while(b != 0)21 {22 ... Read More
posted @ 2013-12-01 11:05
yiyi_xuechen
Views(252)
Comments(0)
Diggs(0)
1 /** 2 定义 3 ⒈ 对于一个集合D,D中任意有限个点的线性组合的全体称为D的凸包。 4 ⒉ 对于一个集合D,所有包含D的凸集之交称为D的凸包。 5 可以证明,上述两种定义是等价的 6 7 概念 8 1. 点集Q的凸包(convex hull)是指一个最小凸多边形,满足Q中的点 9 或者在多边形边上或者在其内。 10 2. 一组平面上的点,求一个包含所有点的最小的凸多边形,这就是凸包 11 问题了。这可以形象地想成这样:在地上放置一些不可移动的木桩,用 12 一根绳子把他们尽量紧地圈起来,并且为凸边形,这就是凸包了。 13 14 常用方法: 15 穷举法,格雷... Read More
posted @ 2013-12-01 11:04
yiyi_xuechen
Views(962)
Comments(0)
Diggs(0)
1 /** 2 给出线段AB以及线段CD,只要判断A、B两点在直线CD的两端,并且C、D两点在直线AB的两端即可。 3 用叉乘进行判断。 4 5 问题描述 6 下面给出的是一个判断线段相交的次数 7 8 输入: 9 n:线段的个数 10 seg.begin.x,seg.begin.y,seg.end.x,seg.end.y:分别表示线段p1p2的点坐标 11 12 输出: 13 n个线段中两两相交的次数 14 15 样例输入 16 2 17 1 0 0 0 18 0 1 0 0 19 样例输出: 20 1 21 */ 22 23 #include 24 using... Read More
posted @ 2013-12-01 11:03
yiyi_xuechen
Views(320)
Comments(0)
Diggs(0)
1 /** 2 题目描述: 3 输入N个学生的信息,然后进行查询。 4 5 输入: 6 输入的第一行为N,即学生的个数(N 40 #include 41 #include 42 #include 43 using namespace std; 44 45 struct Student 46 { 47 char no[100]; 48 char name[100]; 49 char sex[5]; 50 int age; 51 52 bool operator = base) 79 { 80 ... Read More
posted @ 2013-12-01 11:01
yiyi_xuechen
Views(232)
Comments(0)
Diggs(0)
C++的Algorithm函数库中存在一系列的查找函数,使用起来很方便: 1 #include 2 #include 3 #include 4 using namespace std; 5 6 int main() 7 { 8 int all[14]={0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 4, 5, 6}; 9 int *a = find(all, all + 11, 8);//在all的前11个元素中查找8,如果存在,则返回8所对应的指针10 printf_s("%d\n", *a);11 12 int all2[4] = {... Read More
posted @ 2013-12-01 10:59
yiyi_xuechen
Views(188)
Comments(0)
Diggs(0)
要注意两种不同的初始化方法以及算法复杂度问题。 1 /** 2 高精度整数的四则运算—— + - * / % 3 以进制转换为例,输出X的N进制表示的数 4 5 题目描述 : 6 将M进制的数X转换为N进制的数输出。 7 8 输入: 9 输入的第一行包括两个整数:M和N(2 21 #include 22 #include 23 using namespace std; 24 25 #define maxDigits 100 26 27 ////高精度整数类 28 class bigInteger 29 { 30 pub... Read More
posted @ 2013-12-01 10:58
yiyi_xuechen
Views(399)
Comments(0)
Diggs(0)
1 /** 2 并查集定义: 3 并查集是一种树形数据结构,用于实现如确定某个集合含有哪些元素、判断 4 某两个元素是否存在于同一个集合中、求集合中元素的数量等问题。 5 并查集主要操作: 6 (1)合并两个不相交的集合; 7 (2)判断两个元素是否属于同一集合。 8 9 题目描述: 某省调查城镇交通状况,得到现有城镇道路统计表,表中列出了每条道路直10 接连通的城镇。省政府“畅通工程”的目标是使全省任何两个城镇间都可以实现交通(11 但不一定有直接的道路相连,只要互相间接通过道路可达即可)。问最少还需要建设12 多少条道路? 13 输入:14 测试输入包含若干测试用例。每个测试用例的第... Read More
posted @ 2013-12-01 10:57
yiyi_xuechen
Views(189)
Comments(0)
Diggs(0)
本文主要介绍了最小生成树的两种解决办法:kruskal以及prim 1 /** 2 Kruskal算法流程: 3 (1)初始时所有节点属于孤立的集合; 4 (2)按照边权递增顺序遍历所有的边,若遍历到的边两个节点仍分属于不同的 5 集合(该边即为联通这两个结合的边中权值最小的那条),则确定该边为最小生 6 成树上的一条边,并将这两个顶点分属的集合合并; 7 (3)遍历完所有的边之后,原图上所有节点属于同一个集合则被选取的边和原图 8 中所有节点构成最小生成树;否则原图不连通,最小生成树不存在。 9 10 11 样例输入: ... Read More
posted @ 2013-12-01 10:56
yiyi_xuechen
Views(233)
Comments(0)
Diggs(0)
本文主要讨论了最短路径的三个算法:Floyd,Dijkstra以及Bellman_Ford的实现方法以及他们之间的区别与联系 1 /** 2 Floyd算法流程: 3 若edge[i][j]表示从结点i到结点j,中间只能经过编号小于k的点时的最短路径长度, 4 我们可以由这些值确定当中间允许经过编号小于等于k的结点时,它们之间的最短路径长 5 度。同样,与原情况相比,新情况中允许 出现在中间路径的结点新增了编号为 k 的结 6 点,同理我们确定 edge[i][k] + edge[k][j]的值与edge[i][j]的值,若前者较小则该值代 7 表了新情况中从结点i到... Read More
posted @ 2013-12-01 10:52
yiyi_xuechen
Views(264)
Comments(0)
Diggs(0)
18. 移除特定元素——remove 1 #include 2 #include 3 #include 4 5 //remove 6 #include 7 #include 8 using namespace std; 9 10 int main()11 {12 int all[11] = {11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1};13 int *a = remove(all, all + 11, 2);// 移除all中所有数值为2的元素14 15 for(int i = 0 ; i 2 #include 3 #include 4 5 //swap 6 #... Read More
posted @ 2013-12-01 10:51
yiyi_xuechen
Views(187)
Comments(0)
Diggs(0)
9. 包括——includes 1 #include 2 #include 3 #include 4 5 //includes 6 #include 7 #include 8 9 using namespace std;10 11 int main()12 {13 int all[11] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};14 int all2[4] = {4, 5, 8};15 16 bool y = includes(all, all + 10, all2 , all2 + 3);//判断all的前10个数中是否包含all2的三个... Read More
posted @ 2013-12-01 10:47
yiyi_xuechen
Views(278)
Comments(0)
Diggs(0)
题目描述: 嘿嘿,这个关于 7 的题目这次算是第三次了。这个 7 可谓是最厉害的,呵呵。 首先,如果这个数要在 1 - 1 000 000之间, 并且能够被 7 整除或者用 10 进制表示的时候包含数字 7, 那么这个数就叫做魔女の数。输入: 有多个测试点,每个测试点一行,只有两个整数 a 和 b, 你需要计数出 a 和 b 之间(包含 a 和 b)一共有多少个 魔女の数。不过如果 a 与 b 其中有一个不在魔女の数 的范围内的话,应该输出 Overflow。输出: 对每个测试点输出对应的魔女の数的数目, 一个结果一行,按样例格式输出。样例输入:1 107 170 9样例输出:有 1 ... Read More
posted @ 2013-12-01 10:42
yiyi_xuechen
Views(301)
Comments(0)
Diggs(0)
1.求和——accumulate 1 #include 2 #include 3 #include 4 5 #include//accumulate 6 using namespace std; 7 8 int main() 9 {10 int all[100] = {2,2,3,4,5,6,7,8,9,10};11 int sum = accumulate(all, all + 3, 1);//all的前三个数相加,和的初始值是112 printf("%d", sum);13 14 return 0;15 }2.二分查找—— binary_search 1... Read More
posted @ 2013-12-01 10:39
yiyi_xuechen
Views(443)
Comments(0)
Diggs(0)
算法是计算机科学领域最重要的基石之一,但却受到了国内一些程序员的冷落。许多学生看到一些公司在招聘时要求的编程语言五花八门就产生了一种误解,认为学计算机就是学各种编程语言,或者认为,学习最新的语言、技术、标准就是最好的铺路方法。其实大家都被这些公司误导了。编程语言虽然该学,但是学习计算机算法和理论更重要,因为计算机算法和理论更重要,因为计算机语言和开发平台日新月异,但万变不离其宗的是那些算法和理论,例如数据结构、算法、编译原理、计算机体系结构、关系型数据库原理等等。在“开复学生网”上,有位同学生动地把这些基础课程比拟为“内功”,把新的语言、技术、标准比拟为“外功”。整天赶时髦的人最后只懂得招.. Read More
posted @ 2013-12-01 10:33
yiyi_xuechen
Views(198)
Comments(0)
Diggs(0)
联系首先,两者都是基于快速排序的方法。它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按照该方法对这两个部分分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据编程有序序列。假设要排序的数组是A[1]...A[N],快速排序的基本流程如下:(1)设置两个变量i,j,分别赋值为1和N;(2)以第一个数组元素作为关键数据,赋值给x,即x=A[1];(3)从j开始向前搜索,即由后往前搜索(j = j - 1),找到第一个小于x的元素,两者交换;(4)从i开始向后搜索,即由前开始向后搜索(i = i + 1),找到第一个大 Read More
posted @ 2013-12-01 10:29
yiyi_xuechen
Views(342)
Comments(0)
Diggs(0)
常类型是指使用类型修饰符const说明的类型,常类型的变量或对象的值是不能被更新的。因此,定义或说明常类型时必须进行初始化。 概述1. const有什么用途?在 c程序中,const的用法主要有定义常量、修饰函数参数、修饰函数返回值等3个用处。在c++程序中,它还可以修饰函数的定义体,定义类中某个成员为常态函数,即不改变类中的数据成员。被const修改的东西都要受到强制保护,可以预防意外的变动,能提高程序的健壮性。2. const与#define相比有什么不同?它们都可以用来定义常量,但const比#define有更多优点:(1) const常量有数据类型,而宏常量没有数据类型。编译器可以对前 Read More
posted @ 2013-12-01 10:25
yiyi_xuechen
Views(264)
Comments(0)
Diggs(0)
1.string、string.h、cstring三者的区别与联系 (1)string是C++标准库里面的string模板,也包含了C风格字符串操作的库函数,因此可以定义string类,使用时需声明namespace std。(2)string.h是C风格字符串操作的一个库函数,因此使用#include时是不能定义string类的,使用时不需声明namespace std。(3)cstring是把string.h放到std中,它的功能和string.h一样,因为使用了std,所以使用时需要声明namespace std。PS:#include和#include也是一样的道理。iostream. Read More
posted @ 2013-12-01 10:19
yiyi_xuechen
Views(1802)
Comments(0)
Diggs(0)
1.sizeof操作符的结果类型是size_t,它在头文件中typedef为unsigned int类型。该类型保证能容纳实现所建立的最大对象的字节大小。2.sizeof是算符,strlen是函数。3.sizeof可以用类型做参数,strlen只能用char*做参数,且必须是以''\0''结尾的。sizeof还可以用函数做参数,比如:short f();printf("%d\n", sizeof(f()));输出的结果是sizeof(short),即2。4.数组做sizeof的参数不退化,传递给strlen就退化为指针了。5.大部分编译程序在 Read More
posted @ 2013-12-01 10:17
yiyi_xuechen
Views(172)
Comments(0)
Diggs(0)
常用字符串操作:strcpy_s,strcat_s,strchr,strcmp,_strcmpi,strcspn,_strdup,_stricmp,strerror_s,strncmp,_strnicmp,strncpy_s,_strnset_s,strpbrk,strrchr,_strrev,_strset_s,strspn,strstr,strtod,strtok_s,strtol,_strlwr_s,_strupr_s,_swab举例如下: 1 #include 2 #include 3 using namespace std; 4 5 int main() 6 { 7 ... Read More
posted @ 2013-12-01 10:16
yiyi_xuechen
Views(630)
Comments(0)
Diggs(0)
1.把C++当成一门新的语言学习(和C没啥关系!真的。); 2.看《Thinking In C++》,不要看《C++变成死相》; 3.看《The C++ Programming Language》和《Inside The C++ Object Model》,不要因为他们很难而我们自己是初学者所以就不看; 4.不要被VC、BCB、BC、MC、TC等词汇所迷惑——他们都是集成开发环境,而我们要学的是一门语言; 5.不要放过任何一个看上去很简单的小编程问题——他们往往并不那么简单,或者可以引伸出很多知识点; 6.会用Visual C++,并不说明你会C++; 7.学class并不难,te... Read More
posted @ 2013-12-01 10:13
yiyi_xuechen
Views(216)
Comments(0)
Diggs(0)
先看一下代码~~ 1 #include 2 #include 3 #include 4 using namespace std; 5 6 7 typedef struct Segmentation_Results 8 { 9 string words;//词语内容 10 int length; //length,词语的长度 11 string word_type;//word type,词性ID值,可以快速的获取词性表 12 int nFreq;//词语的频度 13 } SegResult; 14 15 void Split(char* ... Read More
posted @ 2013-12-01 10:10
yiyi_xuechen
Views(305)
Comments(0)
Diggs(0)
先看一个例子,我在vs2010中运用template void Prim::getMinTree(Vertex source,Weight minTree[][graph_size])这种方法实现函数完全没错的,可是已=一转成vc6.0在编译时就出现missing subscript这种错误,真是越来越讨厌vc6.0了~~看来这种东西只能换成template void Prim::getMinTree(Vertex source,Weight **minTree)喽?不过,用这种方法的时候,就要注意C++动态分配内存了,下面是分配方法:首先要说的是new是C++中内建的操作符,具体用法见下面详 Read More
posted @ 2013-12-01 10:08
yiyi_xuechen
Views(990)
Comments(0)
Diggs(0)
VC中使用Unicode的一些列问题VC6.0中默认的是多字节编码,而自从VS2005以后都是默认的Unicode字符编码格式了。至于ANSI, MBCS(多字节编码)和UNICODE之间的区别可以百度一下。下面的一篇博文写的也比较详细:http://www.tongji.net/index.php/uid-160994-action-viewspace-itemid-12415大致说来:我们用C语言写的控制台程序里面大多都是多自己编码,其中英文字母是一个字节,中文是两个字节。而Unicode编码中英文和中文全是占两个字节。VC中用Unicode编码的一个好处就是MFC做的界面可以是操作系统的 Read More
posted @ 2013-12-01 10:06
yiyi_xuechen
Views(463)
Comments(0)
Diggs(0)
1 项目风格1.1 项目取名在VC之中,项目名为最后可执行文件名,所以项目名最好以最终的可执行文件名一致。1.2 项目目录设置为保证VC项目的备份方便、快捷,将所有该项目有关的文件全部放到统一的目录之下,为每个项目在该目录之下建立一个目录,项目之间的公共部分建立在public目录之下,项目所需要的基础库根据所需要的基础库数目分别建立不同的目录,项目相关的测试程序都统一放在TEST目录之下。下表显示了一个软件工程PSS系统的目录设置表:PSS系统有两个模块PSS_mod1和PSS_mod2,两个模块有一部分共用代码,在工程开发过程之中编写了三个测试程序PSS_TEST1、 PSS_TEST2、P Read More
posted @ 2013-12-01 10:03
yiyi_xuechen
Views(292)
Comments(2)
Diggs(0)
1 int CSplashWnd::OnCreate(LPCREATESTRUCT lpCreateStruct)2 {3 if (CWnd::OnCreate(lpCreateStruct)==-1)4 return -1;5 6 CenterWindow();7 SetTimer(1,1000,NULL); //时间控制8 return 0;9 }View Code 1.创建一个SDI或MDI工程。2.新建或导入一个ID号为IDB_SPLASH的位图。3.从CWnd类派生一个名为CSplashWnd的子类,并添加两个保护成员变量:1 CBit... Read More
posted @ 2013-12-01 10:01
yiyi_xuechen
Views(398)
Comments(0)
Diggs(0)

浙公网安备 33010602011771号