Advertisement

7-8 汉诺塔的非递规解(基于堆栈与回溯法)

阅读量:

通过采用堆栈结构实现非递归(循环)方式解决汉诺塔问题(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

PS:下列代码中所有字符均按照 初始柱-工具柱-目标柱 给出

需要特别提醒的是,切勿采用cin流进行输入输出操作,即便关闭同步功能仍可能导致超时问题。

递归版本:

复制代码
    #include<bits/stdc++.h>
    using namespace std;
    void hanoi(int n,char a,char b,char c)
    {
    if(n==1)	//若只有一个盘子,直接挪
    	printf("%c -> %c\n",a,c);
    else
    {
     	han

全部评论 (0)

还没有任何评论哟~