Chinaunix首页 | 论坛 | 博客
  • 博客访问: 208008
  • 博文数量: 33
  • 博客积分: 1241
  • 博客等级: 中尉
  • 技术积分: 330
  • 用 户 组: 普通用户
  • 注册时间: 2007-01-20 16:34
个人简介

..

文章分类

全部博文(33)

文章存档

2012年(1)

2011年(8)

2010年(8)

2009年(4)

2007年(12)

我的朋友

分类: C/C++

2011-11-18 15:28:31

汉诺塔:汉诺塔(又称河内塔)问题是源于印度一个古老传说的益智玩具。创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上安大小顺序摞着64片黄金圆盘。大梵天命令婆罗门把圆盘从下面开始按大小顺序重新摆放在另一根柱子上。并且规定,在小圆盘上不能放大圆盘,在三根柱子之间一次只能移动一个圆盘。

为了实现 n个盘从 借助c 从a 移动到 b
思路如下:
  首先考虑极限当只有一个盘的时候 只要 盘直接从 a -> b即可
  那么当有2个盘的时候就只要先把1号盘从a -> c 然后 把2号盘 a->b 再 把 2好盘从 c - > b
  那么当有n个盘的时候你只要先把 n-1个 盘 借助  b  移动到 c 然后将 n号盘从 a -> b
  那么这时候只要将 n-1想办法从c移动到 b 借助 a  那么就可以先把 n-2个盘借助b移动到a然后 把n-1号盘从c-> b如此递归就是了!

  1. #include <stdio.h>
  2. #include <stdlib.h>

  3. void mov(int n,char a,char b)
  4. {
  5.    printf("disk%d : %c --> %c\n", n,a,b);
  6. }

  7. void Hanoi(int n,char a,char b,char c)
  8. {
  9.    if(n == 0) return;
  10.    Hanoi(n-1,a,c,b);
  11.    mov(n,a,b);
  12.    Hanoi(n-1,c,b,a);
  13. }
  14. int main(void)
  15. {
  16.     Hanoi(3,'a','b','c');
  17.     return 0;
  18. }
阅读(1958) | 评论(0) | 转发(0) |
0

上一篇:bubble sort

下一篇:quick sort

给主人留下些什么吧!~~