发表时间:2007年1月23日 20时16分
[%=@title%][%=@count%]票 [[%=@percent%]%]
Hanoi塔问题
假设有三个分别命名为A、B、C的塔座,在塔座X上插有n个直径大小各不相同、依小到大编号为1,2,…,n的圆盘。现要求将X轴上的n个圆盘移至塔座Z上并仍按同样顺序叠排,圆盘移动时必须遵循下列规则:
1)每次只能移动一个圆盘;
2)圆盘可以插在A、B、C中的任一塔座上;
3)任何时刻都不能将一个较大的圆盘压在较小的圆盘之上
using System;
using System.Collections.Generic;
using System.Text;
namespace Hanoi
{
class Program
{
public void HanoiMethod(int n,char OneTower,char TwoTower,char ThreeTower)
//将n个盘子从one塔借助two塔移动到 //three塔
{
if (n == 1)
{
MoveMethod(OneTower, ThreeTower);
}
else
{
HanoiMethod(n - 1, OneTower, ThreeTower, TwoTower);
MoveMethod(OneTower,ThreeTower);
HanoiMethod(n-1,TwoTower,OneTower,ThreeTower);
}
}
public void MoveMethod(char Xtower,char Ytower)
{
Console.WriteLine("{0}塔---->{1}塔", Xtower, Ytower);
}
static void Main(string[] args)
{// m为盘子数量
int Disks;
Console.WriteLine("请输入盘子的数量:");
Disks=Int32.Parse(Console.ReadLine());
Console.WriteLine("移动{0}个盘子:/n",Disks);
Program Moves = new Program();
Moves.HanoiMethod(Disks, 'A', 'B', 'C');
}
}