关于汉诺塔算法
c#吧
全部回复
仅看楼主
level 5
spider_home 楼主
问题就不多描述啦
算法还是那个,只是谈谈我的理解
A,B,C塔要将A塔上的n个盘子全部移到C塔上
我们可以这样考虑:B塔只是辅助的,我们可以将n-1个盘子看成一个盘子,然后移动到B上,将A最后一个移到C上,在将B上的移动到C上
而此时我们又将A塔作为辅助塔,将B上的n-2个盘子看成一个盘子...这样一直递归下去,最后肯定就出现了最后一个盘子(也就是最顶上的盘子),这个盘子到底是由A移到C上的还是A移到B上的就看n为奇数还是偶数了,奇数A到C,偶数A到B
二楼帖代码
2013年09月10日 09点09分 1
level 5
spider_home 楼主
class Program
{
static int flag = 0;
static void Main(string[] args)
{
Move(10, 'A', 'B', 'C');
Console.ReadKey();
}
static void Move(int n, char a, char b, char c)
{
if (n == 1)
{
flag++;
Console.WriteLine(string.Format("{0} 移动到 {1} --- {2}次", a, c, flag));
}
else
{
Move(n - 1, a, c, b);
flag++;
Console.WriteLine(string.Format("{0} 移动到 {1} --- {2}次", a, c, flag));
Move(n - 1, b, a, c);
}
}
}
2013年09月10日 09点09分 2
level 5
spider_home 楼主
这个居然也么人看[狂汗]
2013年09月10日 11点09分 3
level 7
怎么说你呢,无非归结到移动的次数等于2^n – 1,做法就是递归而已,像这种一般的逻辑推理,看看也就过了,还是多看看数学吧,特别是矩阵论、概率统计随机过程,可以解决很多实际问题,对你层次的提高也很有帮助。
2013年09月11日 14点09分 4
level 12
搜了下,那个C语言版更好懂!
2013年09月12日 03点09分 6
C++的看的我晕菜了
2013年09月12日 04点09分
回复 异次元代码 :丫的,个个都说c++难难难,我就不信那个邪,过一阵学c++ 被人说的难说烦了!好像是c++之父说的,使用的最广泛的语言必然是被骂的最多的语言! 等我这webform mvc等学累了,去学c++,研究算法等等,我看到网易公开课有这个视频。推荐一下~~~
2013年09月12日 07点09分
回复 异次元代码 :我之前学过 c++高级语言程序设计,大一教的,只不过教的其实是C,算是编程入门吧
2013年09月12日 07点09分
回复 此ID已被我抢注 :不懂硬件学c无用。网易公开课是孙鑫的,没有底子你看不懂
2013年09月12日 07点09分
1