7-17 汉诺塔的非递归实现

Posted 我只有一件白T恤

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了7-17 汉诺塔的非递归实现相关的知识,希望对你有一定的参考价值。

7-17 汉诺塔的非递归实现(25 分)

借助堆栈以非递归(循环)方式求解汉诺塔的问题(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<stdio.h>
#include<iostream>
using namespace std;
void f(int n, char a, char b, char c)
{
    if (n == 1)cout << a<<" -> "<< c << endl;
    else {
        f(n - 1, a, c, b);
        cout << a << " -> " << c << endl;
        f(n - 1, b, a, c);
    }
}
int main()
{
    int n; 
    cin >> n;
    f(n, a, b, c);
    return 0;
}
递归未AC代码

 







以上是关于7-17 汉诺塔的非递归实现的主要内容,如果未能解决你的问题,请参考以下文章

7-17 汉诺塔的非递归实现(25 分)(有待改进)

汉诺塔的非递归实现(借助堆栈模拟递归)

汉诺塔的非递归实现(栈)

5-17 汉诺塔的非递归实现 (25分)

习题3.10 汉诺塔的非递归实现(25 分)浙大版《数据结构(第2版)》题目集

汉诺塔的非递归算法