今天看了WillWayer的一篇文章(http://www.cnblogs.com/willwayer/archive/2009/03/24/1420227.html),自己也写了一个,练练手。

Code
1
public static class Hanoi
2
{
3
public static int _floorCount;
4
5
public static int FloorCount
6
{
7
get
8
{
9
return _floorCount;
10
}
11
12
set
13
{
14
if (value < 1)
15
throw new ApplicationException("塔的层数必须是一个正整数!");
16
_floorCount = value;
17
}
18
}
19
20
static Hanoi()
21
{
22
FloorCount = 64;
23
}
24
25
public enum Seat
26
{
27
A,
28
B,
29
C
30
}
31
32
public class Step
33
{
34
public Seat Start
35
{
36
get;
37
set;
38
}
39
40
public Seat End
41
{
42
get;
43
set;
44
}
45
46
public Step(Seat start, Seat end)
47
{
48
Start = start;
49
End = end;
50
}
51
52
public override string ToString()
53
{
54
return Start.ToString() + " " + End.ToString();
55
}
56
}
57
58
private static List<Step> CalculateSteps(int floorCount, Seat start, Seat temp, Seat end)
59
{
60
List<Step> steps = new List<Step>();
61
if (floorCount == 1)
62
steps.Add(new Step(start, end));
63
else
64
{
65
foreach (Step step in CalculateSteps(floorCount - 1, start, end, temp))
66
{
67
steps.Add(step);
68
}
69
steps.Add(new Step(start, Seat.C));
70
foreach (Step step in CalculateSteps(floorCount - 1, temp, start, end))
71
{
72
steps.Add(step);
73
}
74
}
75
76
return steps;
77
}
78
79
public static List<Step> CalculateSteps()
80
{
81
return CalculateSteps(FloorCount, Seat.A, Seat.B, Seat.C);
82
}
83
84
public static void Print()
85
{
86
foreach (Step step in CalculateSteps())
87
{
88
Console.WriteLine(step);
89
}
90
}
91
}