您的位置:首页 > 理论基础 > 数据结构算法

数据结构实验 第二单元 汉诺塔(非递归,用栈模拟递归)

2015-12-18 12:14 387 查看
/// <summary>
/// 模拟 递归函数的调用堆栈
/// </summary>
/// <param name="n"></param>
private void GoHonoi(int n)
{
Step sp = new Step(n,'A','B','C');
//用栈来模拟系统的 递归调用栈
LinkStack ls = new LinkStack();
int count = 0;
//相当于调用 Honoi(n,'A','B','C');
ls.Push(sp);
while(!ls.Empty())
{
Step topStep = (Step)ls.Top();
while (topStep.n > 1)
{
//将 Honoi(n-1...)压栈
ls.Push(new Step(topStep.n-1,topStep.A,topStep.C,topStep.B));
topStep = (Step)ls.Top();
}
//至此,honoi(n..) 的 递归函数均入栈
if (topStep.n == 1)
{
textBox3.AppendText(string.Format("{3}:移动 {2} 盘, {0} 到 {1}\n", topStep.A, topStep.C,1,++count));
ls.Pop();
topStep = (Step)ls.Top();
}
//如果栈不为空
if (!ls.Empty())
{
textBox3.AppendText(string.Format("{3}:移动 {2} 盘, {0} 到 {1}\n", topStep.A, topStep.C, topStep.n, ++count));
ls.Pop();
ls.Push(new Step(topStep.n - 1, topStep.B , topStep.A, topStep.C));
topStep = (Step)ls.Top();
}

}

}


第一次调用GoHonoi(n)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: