2012年8月3日

摘要: 思路:对矩阵中任何一个节点O,找到其所有的邻近节点A,B..并相加得到和sum,用sum-节点A的值,得到一个新值O1。再找所有和AB..邻近的(已经出现的不再加)之和,减去O1,又得到一个新值O2,重复该过程,直到O值等于0或小于0。若小于0,则不可能。若所有的节点经过该运算等于0则可以。构造的过程如下:找到矩阵中最小的元素,找到相邻最小的同时减去最小值,重复该过程,就可以减到0。例如: 矩阵 1 2 3 4 首先对于第一行第一列元素1,,它的相邻元素和为2+3=5,将5-1得到4;元素2和3的相邻元素为4(1已出现),而4-4=0,元素1满... 阅读全文
posted @ 2012-08-03 11:08 Trony 阅读(895) 评论(0) 推荐(0) 编辑
 
摘要: Q:一个射击运动员打靶,靶一共有10环,连开10 枪打中90环的可能性有多少?分析:可通过递归算法来进行求解,运动员在射击的过程中,每次射击有11种可能:命中1环到10环之间的环数,或者脱靶。只要最后一靶只差10环以内,则此次射击有效,进行输出。代码实现如下: 1 //函数功能 : 求解number次打中sum环的种数 2 //函数参数 : number为打靶次数,sum为需要命中的环数,result用来保存中间结果,total记录种数 3 //返回值 : 无 4 void ShootProblem_Solution(int number, int sum, vector<int> 阅读全文
posted @ 2012-08-03 10:30 Trony 阅读(943) 评论(0) 推荐(0) 编辑
 
摘要: 问题:输入一个字符串,输出该字符串中字符的所有组合。举个例子,如果输入abc,它的组合有a、b、c、ab、ac、bc、abc。思路:同样是用递归求解。可以考虑求长度为n的字符串中m个字符的组合,设为C(n,m)。原问题的解即为C(n, 1), C(n, 2),...C(n, n)的总和。对于求C(n, m),从第一个字符开始扫描,每个字符有两种情况,要么被选中,要么不被选中,如果被选中,递归求解C(n-1, m-1)。如果未被选中,递归求解C(n-1, m)。不管哪种方式,n的值都会减少,递归的终止条件n=0或m=0。 代码实现如下: 1 //函数功能 : 从一个字符串中选m个元素 2 //. 阅读全文
posted @ 2012-08-03 10:18 Trony 阅读(369) 评论(0) 推荐(0) 编辑
 
摘要: 问题1 :输入一个字符串,打印出该字符串中字符的所有排列。例如输入字符串abc,则输出由字符a、b、c所能排列出来的所有字符串abc、acb、bac、bca、cab和cba。 分析:可通过递归求解。递归算法的四个特性:(1)必须有可达到的终止条件,否则程序将陷入死循环;(2)子问题在规模上比原问题小;(3)子问题可通过再次递归调用求解;(4)子问题的解应能组合成整个问题的解。下面这个图很清楚的给出了递归的过程: 代码实现如下: 1 //函数功能 : 求一个字符串某个区间内字符的全排列 2 //函数参数 : pStr为字符串,begin和end表示区间 3 //返回值 : ... 阅读全文
posted @ 2012-08-03 10:12 Trony 阅读(1432) 评论(0) 推荐(0) 编辑