一、问题描述
问题链接:汉诺塔的非递归实现
问题描述:
借助堆栈以非递归(循环)方式求解汉诺塔的问题(n, a, b, c),即将N个盘子从起始柱(标记为“a”)通过借助柱(标记为“b”)移动到目标柱(标记为“c”),并保证每个移动符合汉诺塔问题的要求。
输入格式:
输入为一个正整数N,即起始柱上的盘数。
输出格式:
每个操作(移动)占一行,按
柱1 -> 柱2的格式输出。输入样例:
3
输出样例:
a -> c
a -> b
c -> b
a -> c
b -> a
b -> c
a -> c
二、思路
根据用递归实现汉诺塔的方法,我们可以通过调用栈去模拟汉诺塔问题的递归。
三、代码实现
//用栈模拟递归
#include<bits/stdc++.h>
using namespace std;
//定义汉诺塔的移动结构
struct Move {
int n; //移动盘子数
char start; /

博客围绕汉诺塔的非递归实现展开,借助堆栈以循环方式求解该问题。介绍了问题描述、输入输出格式,给出思路是用调用栈模拟递归。还给出代码实现,并指出当移动盘子数大于20时,需用手写栈实现。
最低0.47元/天 解锁文章
8211

被折叠的 条评论
为什么被折叠?



