汉诺塔Hanoi

来源:互联网 发布:php 二维数组取最大值 编辑:程序博客网 时间:2024/06/03 09:11
算法思路:
  1.如果只有一个金片,则把该金片从源移动到目标棒,结束。
  2.如果有n个金片,则把前n-1个金片移动到辅助的棒,然后把自己移动到目标棒,最后再把前n-1个移动到目标棒.
  3.单纯对于有N个金片要挪动的步数求出, 可以使用递推方法,满足递推方程f(i) = f(i - 1) * 2 + 1.
  1. class hanoi
  2.     {
  3.         private int i = 0;
  4.         public int I
  5.         {
  6.             get { return i; }
  7.             set { this.i = value; }
  8.         }
  9.         //---------核心到代码----------
  10.         internal void HanoiMove(int n, char a, char b, char c)
  11.         {
  12.             if (n == 1)
  13.             {
  14.                 i++;
  15.                 Move(n, a, c);
  16.                 //Console.WriteLine("第{0}个:{1}-------->{2}", n, a, c);
  17.             }
  18.             else
  19.             {
  20.                 HanoiMove(n - 1, a, c, b);
  21.                 i++;
  22.                 Move(n, a, c);
  23.                 //Console.WriteLine("第{0}个:{1}--------------->{2}", n, a, c);
  24.                 HanoiMove(n - 1, b, a, c);
  25.             }
  26.         }
  27.         private void Move(int n, char a, char c)
  28.         {
  29.             Console.WriteLine("第{0}个:{1}-------->{2}", n, a, c);
  30.         }
  31.     }
原创粉丝点击