Algorithms
文章平均质量分 62
majcos
请用一段话来描述您自己,如性格、爱好、生活态度、工作情况、受教育状况等。让大家更了解你,不要超过1000个汉字。
展开
-
八皇后问题程序
大一学pascal的时候,教材上就有这个问题的程序,那个程序不长,看起来也不难,似乎看明白了。但是真正要自己写一个,还是费了我很大功夫!#include #include using namespace std;const int N = 8;int y[N+1];//如果第k个皇后能放在第y[k]列,则返回true,否则返回false. //y是一个全程数组,进入此过程时已经设置了k个值bool原创 2005-12-28 17:05:00 · 923 阅读 · 0 评论 -
冒泡排序代码
最简单的排序方法是冒泡排序方法。这种方法的基本思想是,将待排序的元素看作是竖着排列的“气泡”,较小的元素比较轻,从而要往上浮。在冒泡排序算法中我们要对这个“气泡”序列处理若干遍。所谓一遍处理,就是自底向上检查一遍这个序列,并时刻注意两个相邻的元素的顺序是否正确。如果发现两个相邻元素的顺序不对,即“轻”的元素在下面,就交换它们的位置。显然,处理一遍之后,“最轻”的元素就浮到了最高位置;处理二遍之后,原创 2006-10-10 10:28:00 · 9003 阅读 · 1 评论 -
插入排序代码
插入排序的基本思想,每次从未排序的序列中取一个元素,插入到已经排好序的序列的合适位置。小规模输入来说,插入排序速度比较快。许多复杂的排序法,在规模较小的情况下,都使用插入排序法来进行排序。数组的插入排序算法如下:void InsertionSort(int a[], int n){ if(a==NULL) return; for(int i=1; in; ++i)原创 2006-10-10 11:54:00 · 2196 阅读 · 0 评论 -
归并排序代码
可以运用分而治之方法来解决排序问题,该问题是将n 个元素排成非递减顺序。分而治之方法通常用以下的步骤来进行排序算法:若n为1,算法终止;否则,将这一元素集合分割成两个或更多个子集合,对每一个子集合分别排序,然后将排好序的子集合归并为一个集合。 代码如下:void InsertionSort(int a[], int start, int end){ if(a==NULL)原创 2006-10-10 14:01:00 · 2423 阅读 · 0 评论 -
堆排序代码
对排序的过程: 建立堆 执行n-1次DeleteHeap操作堆排序与直接插入排序的区别: 直接选择排序中,为了从R[1..n]中选出关键字最小的记录,必须进行n-1次比较,然后在R[2..n]中选出关键字最小的记录,又需要做n-2次比较。事实上,后面的n-2次比较中,有许多比较可能在前面的n-1次比较中已经做过,但由于前一趟排序时未保留这些比较结果,所以后一趟排序时又重复执行了这些比较操作。堆原创 2006-10-10 16:30:00 · 3285 阅读 · 0 评论 -
LCIS
A longest common increasing subsequence of A and B is a common increasing subsequence of the maximum length. A straightforward O(mn2)-time algorithm for this problem is to sort the shorter sequence, a原创 2006-06-03 13:13:00 · 710 阅读 · 0 评论 -
Technical Interview Questions For Computer Science Programmers
1. Given a rectangular (cuboidal for the puritans) cake with a rectangular piece removed (any size or orientation), how would you cut the remainder of the cake into two equal halves with one straight转载 2006-06-03 13:35:00 · 1407 阅读 · 0 评论 -
前序+中序 =〉后序
二叉树中有一个经典的问题就是,已知给定二叉树的前序遍历序列和中序遍历序列,求其后序遍历序列。采用递归的思想,比较容易解决。代码如下:/*a是前序序列b是中序序列后序序列将保存在c中*/void PostOrder(const char a[], const char b[], char c[], int starta, int startb, int startc,原创 2006-08-18 09:38:00 · 629 阅读 · 0 评论 -
前序+中序 =〉后序
二叉树中有一个经典的问题就是,已知给定二叉树的前序遍历序列和中序遍历序列,求其后序遍历序列。采用递归的思想,比较容易解决。代码如下:/*a是前序序列b是中序序列后序序列将保存在c中*/void PostOrder(const char a[], const char b[], char c[], int starta, int startb, int startc,原创 2006-08-18 09:40:00 · 945 阅读 · 0 评论 -
双向广度优先搜索
双向广度优先搜索 广度优先搜索遵循从初始结点开始一层层扩展直到找到目标结点的搜索规则,它只能较好地解决状态不是太多的情况,承受力很有限。如果扩展结点较多,而目标结点又处在较深层,采用前文叙述的广度搜索解题,搜索量巨大是可想而知的,往往就会出现内存空间不够用的情况。双向搜索和A算法对广度优先的搜索方式进行了改良或改造,加入了一定的“智能因素”,使搜索能尽快接近目标结点,减少了在空间和时间转载 2006-05-23 14:58:00 · 3633 阅读 · 1 评论 -
KMP算法C++代码
KMP算法的思想一般数据结构书都有讲,没讲的话google一下,有很多文章解释了其思想。晚上写了写这个代码,虽然不难,但还是费了番功夫调试,出现的主要问题有:无符号整型数据与整型数据比较大小(让我越来越讨厌无符号数!),还有一个问题就是KMP算法本身与求next数组的算法很类似,但是有些微妙的区别,也让调试了几次。 int* GetNextVal(const char *s, int原创 2006-10-08 21:12:00 · 11354 阅读 · 0 评论 -
Word Puzzles
DescriptionWord puzzles are usually simple and very entertaining for all ages. They are so entertaining that Pizza-Hut company started using table covers with word puzzles printed on them, possibly wi原创 2006-05-14 14:46:00 · 5555 阅读 · 0 评论 -
Sticks
问题描述:http://acm.pku.edu.cn/JudgeOnline/showproblem?problem_id=1011主要想用回溯法的思想解决它。关键是要确定搜索的顺序。要提高算法的效率还要找到合适的剪枝。// Sticks1.cpp : Defines the entry point for the console application.// http://acm.pku.edu原创 2005-12-29 11:01:00 · 1302 阅读 · 2 评论 -
solution to Steps
Problem description:http://acm.pku.edu.cn/JudgeOnline/showproblem?problem_id=2590根据要求可以得出如下论断:2*n步最多可以上n*n+n个台阶,每步所上的台阶数组成的序列为:1,2,3...(n-1),n,n,(n-1)...3,2,1 它们的和为n*n+n。(n〉=1)——结论12*n-1步最多可以上n*n个台阶,原创 2006-01-07 15:21:00 · 729 阅读 · 0 评论 -
回溯的一点点
经典的八皇后问题是用回溯法解决的一个好例子。以下是该程序回溯的部分:while(x>0) { //为当前x位置找一个y //y[x]保存的是第x部的解,而此处是在上一次y[x]值的基础上查找,固有y[x]++,所以 //需要注意第一次计算y[x]++时y[x]的值,也就是说y[x]的初值应该设为y[x]可能的最小 //初值减1,这里为0。这个设置初值的部分在回溯开始之前就要设置。 y原创 2006-01-17 14:26:00 · 895 阅读 · 0 评论 -
一次优化
问题描述:http://acm.pku.edu.cn/JudgeOnline/showproblem?problem_id=1964DescriptionBob is a strategy game programming specialist. In his new city building game the gaming environment is as follows: a city原创 2006-03-20 10:35:00 · 1234 阅读 · 0 评论 -
字母的大小写转换
char toUpper(const char& ch){ return ch & 0xDF;}char toLower(const char& ch){ return ch | 0x20;}利用位运算,一次位运算即可以得出结果原创 2006-02-19 22:11:00 · 722 阅读 · 0 评论 -
前序+后序=〉(二叉)树的个数
假设前序序列为pre,后序序列为post,他们的长度分别为n,必有: pre[0]==post[n-1],同时pre[1]为根节点的第一颗子树的根节点,再post中查找pre[1],这样就可以判定出该树的第一颗子树的前序序列和后序序列。同样的道理,可以判断出该树的所有子树的前序和后序序列。递归解之。代码如下: #include iostream>#include string>usi原创 2006-09-07 22:34:00 · 1008 阅读 · 0 评论 -
纪录一下
INITIALIZE-SINGLE-SOURCE(G, s)1 for each vertex v ∈ V[G]2 do d[v] ← ∞3 π[v] ← NIL4 d[s] 0RELAX(u, v, w)1 if d[v] > d[u] + w(u, v)2 then d[v] ← d[u] + w(u, v)3 π[v] ← u原创 2006-09-12 18:22:00 · 683 阅读 · 0 评论 -
前序+中序 =〉后序
二叉树中有一个经典的问题就是,已知给定二叉树的前序遍历序列和中序遍历序列,求其后序遍历序列。采用递归的思想,比较容易解决。代码如下:/*a是前序序列b是中序序列后序序列将保存在c中*/void PostOrder(const char a[], const char b[], char c[], int starta, int startb, int startc,原创 2006-08-18 09:37:00 · 713 阅读 · 0 评论