#include#includeusing namespace std;void Hanoi(int n,char A,char B,char C){ //n个盘子从A借助B到C上if(n==1){cout""""">i;Hanoi(i,'A','B','C');//目的是将n个盘子从A借助B到C上...
分类:
编程语言 时间:
2014-06-28 20:48:45
阅读次数:
254
汉诺塔,相信大家已经不再陌生。我觉得也可能是很多人比较迷茫的问题。今天,不知道怎么突然灵光一现,把这个困扰我好久的问题给解决了。分享给大家,希望有所帮助。 至于问题背景,这里再大致介绍一下,如图: 将一系列木块,从A移动到C,可以借助B,当然,木块的秩序不能改变,即小的木块一定要放在大的木块上...
分类:
其他好文 时间:
2014-06-25 15:53:54
阅读次数:
201
在通过汉诺塔问题理解递归的精髓中我讲解了怎么把一个复杂的问题一步步recursively划分了成简单显而易见的小问题。其实这个解决问题的思路就是算法中常用的divide
and conquer, 这篇日志通过解决矩阵的乘法,来了解另外一个基本divide and conque思想的strassen算...
分类:
其他好文 时间:
2014-05-26 11:53:42
阅读次数:
365
一 基本概念
分治法,顾名思义分而治之的意思,就是把一个复杂的问题分成两个或更多的相同或相似的子问题,再把子问题分成更小的子问题……直到最后子问题可以简单的直接求解,原问题的解即子问题的解的合并。
二基本思想及策略
分治法的设计思想是:将一个难以直接解决的大问题,分割成一些规模较小的相同问题,以便各个击破,分而治之。
分治策略是:对于一个规模为n的问题,若该问题可以容易地解...
分类:
其他好文 时间:
2014-05-18 14:31:14
阅读次数:
331
之前遇见这个问题,非常费劲地理解了,并写出代码,然后过段时间,再遇见这个问题,又卡住了,如此反反复复两三次,才发现自己对递归的理解依然很肤浅。今天无聊,重温《算法:c语言实现》一书,又遇见了这个问题,心头一紧,担心要费些时间才能写出代码,没想到的是,再理解了书中对递归的定义,蒙住源代码动手写,发现很...
分类:
编程语言 时间:
2014-05-15 16:06:56
阅读次数:
304
本文出自:http://blog.csdn.net/svitter
题意:汉诺塔,多了一根柱子,问你寻找最快的移动次数。
dp [ n ] = dp [ n - j ] * 2 + pow( 2, j ) - 1;
就是把j个汉诺塔移到一根上,然后就是普通的汉诺塔问题,即2^n - 1次移动。
注意pow(2, j )可能超出long long int范围。写二的次方的时候也可用移...
分类:
其他好文 时间:
2014-05-03 00:14:10
阅读次数:
342