using System;
using System.Collections.Generic;
using System.Text;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
int times = new HanoiTower(3).SolveTower();
Console.WriteLine("一共需要{0}次", times);
Console.ReadKey();
}
}
class HanoiTower
{
private int plates;
public HanoiTower(int plates)
{
this.plates = plates;
}
public int SolveTower()
{
return SolveTower(plates, "A", "B", "C");
}
private int SolveTower(int plates,string a, string b, string c)
{
int count = 0;
if (plates <= 0)
throw new ArgumentOutOfRangeException("plates","盘子数必须是大于0的整数");
if (plates == 1)
{
move(a, c);
return 1;
}
count += SolveTower(plates - 1, a, c, b);
count += SolveTower(1, a, b, c);
count += SolveTower(plates - 1, b, a, c);
return count;
}
private void move(string a, string c)
{
Console.WriteLine(a + " => " + c);
}
}
}
using System.Collections.Generic;
using System.Text;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
int times = new HanoiTower(3).SolveTower();
Console.WriteLine("一共需要{0}次", times);
Console.ReadKey();
}
}
class HanoiTower
{
private int plates;
public HanoiTower(int plates)
{
this.plates = plates;
}
public int SolveTower()
{
return SolveTower(plates, "A", "B", "C");
}
private int SolveTower(int plates,string a, string b, string c)
{
int count = 0;
if (plates <= 0)
throw new ArgumentOutOfRangeException("plates","盘子数必须是大于0的整数");
if (plates == 1)
{
move(a, c);
return 1;
}
count += SolveTower(plates - 1, a, c, b);
count += SolveTower(1, a, b, c);
count += SolveTower(plates - 1, b, a, c);
return count;
}
private void move(string a, string c)
{
Console.WriteLine(a + " => " + c);
}
}
}