~$ 存档

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::
  514 随笔 :: 26 文章 :: 15 评论 :: 62万 阅读
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

随笔分类 -  算法题库

1

摘要:关于全排列的代码在网上收集、研究了好几种,包括我自己写的也有循环实现。循环是最容易理解的,按照判定条件进行嵌套,但缺点是,如果有十个八个数据,循环嵌套的层数太深,十分臃肿。很明显,如果一段代码不够简练,我自己也不满意,肯定想尽办法解决它。所以再次记录一下全排列的递归实现。 还是按照自己的一套方法,以 阅读全文
posted @ 2016-03-30 21:12 LuoTian 阅读(413) 评论(0) 推荐(0) 编辑

摘要:题:有三个城市a,b,c,一个人从a城出发,呆一天然后去另一个城市,经过四天,又回到a城的走法?解:把四天看成四个盒子,第一个盒子必定是a,然后在剩下的三个盒子里面置入数字,在置入数字的过程中,产生约束条件。(可以理解为带条件的"排列")比如说,a->b->c>b->a,可以看出,第二个盒子和第一个 阅读全文
posted @ 2016-03-29 14:27 LuoTian 阅读(258) 评论(0) 推荐(0) 编辑

摘要:/*------------完整代码@映雪-------------*/ /*初始化一组数据,省却输入,方便调试*/ #include using namespace std; typedef struct { int value[5];/*价值表*/ int weight[5];/*重量表*/ int num;/*数量*/ int limitw;/*最... 阅读全文
posted @ 2016-03-20 14:26 LuoTian 阅读(809) 评论(0) 推荐(0) 编辑

摘要:题目:集合A={1,2,3,5},从中任取几个数相加等于10,并打印各得哪几个数?补充参照:http://www.cnblogs.com/tinaluo/p/5294341.html上午弄明白了幂集的问题,不得不说这是一个极大的突破!只要把这个思路缕清楚了,就可以解很多问题。幂集问题,简而言之就是穷 阅读全文
posted @ 2016-03-19 16:03 LuoTian 阅读(301) 评论(0) 推荐(0) 编辑

摘要:占位 阅读全文
posted @ 2016-03-19 09:48 LuoTian 阅读(210) 评论(0) 推荐(0) 编辑

摘要:我一直在想着这个事,早晨起来五六点,躺在床上冥想。突然悟解了,真如某些书上写的,大道不过三言两语,说破一文不值。还是按照老方法,把问题最大程度的精简,现在求集合A={a,b}的幂集,只有两个元素,应该有{a,b},{a},{b},{x}四种可能。如果把这两个元素弄清楚了,其余的也都一样, 仅仅是数量 阅读全文
posted @ 2016-03-19 09:17 LuoTian 阅读(1256) 评论(0) 推荐(0) 编辑

摘要:/*摘自书本,这种算法很绕!*/ 阅读全文
posted @ 2016-03-18 04:33 LuoTian 阅读(298) 评论(0) 推荐(0) 编辑

摘要:先把问题做最大程度的简化,不用框一个50*50的大迷宫,只需要压缩在3*3的二维数组中模拟,这个弄清楚了,再大的也是一样。移动方向只包括下移和右移两种方式。先下移,再右移。在这个二维数组中,约定规则:0表示通路,-1表示路径(可通过),1表示障碍物。于是得到一个二维数组的形式如下:(由于四周需要障碍 阅读全文
posted @ 2016-03-18 01:27 LuoTian 阅读(525) 评论(0) 推荐(0) 编辑

摘要:/*-----深度优先搜索----全排列--------*/ #include using namespace std; int a[10],book[10],n; void dfs(int step)/*step第几个盒子*/ { int i; if(step==n+1) { for(i=1;i>n; dfs(1); return 0... 阅读全文
posted @ 2016-03-17 22:57 LuoTian 阅读(563) 评论(0) 推荐(0) 编辑

摘要:穷举的一种应用,计算x+2y+3z=50的非负整数解。先约束每个变量的最大值,x=50,y=25,z=50/3。 阅读全文
posted @ 2016-03-16 09:21 LuoTian 阅读(273) 评论(0) 推荐(0) 编辑

摘要:占位 阅读全文
posted @ 2016-03-16 09:16 LuoTian 阅读(177) 评论(0) 推荐(0) 编辑

摘要:计算1+2*3=,这个程序还是比较绕的,先将程序简化,只做+-*/和=五个运算符的关系。首先,假定这五个运算符中,=号的优先级最低,其次是+-,最高为*/。接着约定,"1+2*3=",为字符串。 第一步,将=号入栈,作为栈底。然后,再依次进行后续的比较。约定:栈顶符号<字符串符号,则字符串符号入栈。 阅读全文
posted @ 2016-03-16 08:35 LuoTian 阅读(288) 评论(0) 推荐(0) 编辑

摘要:另一种解法:将数组全部置1,累计相加到报数,则将该位置置为0,意为该位出列,如此反复。关键在于:把数组作环状处理,这个手法已经演练很多遍了! 阅读全文
posted @ 2016-03-14 09:16 LuoTian 阅读(307) 评论(0) 推荐(0) 编辑

摘要:/* 此解法有一bug,假如有8个人,从第一个人开始数,每说到1就删除,相当于自删除,程序崩溃 */约瑟夫问题,有n个人,编号为1,2,...,n,围成一个圆圈,按照顺时针方向从编号为k的人从1开始报数,报数为m的人出列,如此重复下去,直到所有的人都出列。编写一个算法,要求输入n,k,m,按照出列的 阅读全文
posted @ 2016-03-14 07:09 LuoTian 阅读(1984) 评论(0) 推荐(0) 编辑

摘要:/*网络摘录加工*/尾部递归是一种编程技巧。递归函数是指一些会在函数内调用自己的函数,如果在递归函数中,递归调用返回的结果总被直接返回,则称为尾部递归。尾部递归的函数有助将算法转化成函数编程语言,而且从编译器角度来说,亦容易优化成为普通循环。这是因为从电脑的基本面来说,所有的循环都是利用重复移跳到代 阅读全文
posted @ 2016-03-12 00:39 LuoTian 阅读(415) 评论(0) 推荐(0) 编辑

摘要:问题提出:求数组A={1,5,7,22,9}中的最大值。这种递归非常绕,需要简化来看,比如拿只含两个元素的数组带进去观察。如A={12,25},把问题简化到最简单。 另一种精简的算法,来源于《算法:C语言实现》117页 这种思路简化说明:把一个数组不停的二分对切,只到不能再切为止(切到只有一个元素时 阅读全文
posted @ 2016-03-11 22:02 LuoTian 阅读(726) 评论(0) 推荐(0) 编辑

摘要:计算1+2+3+4+5第一种,从后往前加。 第二种,从两边对加,例:(1+5)+(2+4)+3,需要判定,假如元素个数为偶,则左边+1==右边,如果为奇数,则左边==右边: 阅读全文
posted @ 2016-03-11 21:28 LuoTian 阅读(665) 评论(0) 推荐(0) 编辑

摘要:有一个背包最多可装重量8千克的物品,假设要用该背包装如下水果,要求使背包中装的物品的价值最大,应该装下列哪些物品才能达到要求? 解题思路:首先穷举所有组合可能,有5种物品,一共组合32-1种可能。然后排除超重的可能,在不大于8千克的前提下,再计算各种可能的总价值,最后,比较这些组合的价值,得到最大值 阅读全文
posted @ 2016-03-11 07:44 LuoTian 阅读(4877) 评论(0) 推荐(0) 编辑

摘要:《编程之美》221页,问题:字符串scr=“AABCD”,字符串des="CDAA",循环移位src,是否包含串des? 首先考虑的是移位的问题,有两种可能,要么左移,要么右移,书中采用的是左移的方式。在移动AABCD之后,得到 ABCDA,问题就在于这个最先移动的A放在哪?根据前面的学习,马上可以 阅读全文
posted @ 2016-03-07 20:26 LuoTian 阅读(335) 评论(0) 推荐(0) 编辑

摘要:#include using namespace std; void draw(int n,int x) { if(x0) { draw(n-1); draw(n,1); cout using namespace std; int main() { for(int i=1;i<=9;i++) { ... 阅读全文
posted @ 2016-03-06 22:37 LuoTian 阅读(331) 评论(0) 推荐(0) 编辑

1
点击右上角即可分享
微信分享提示