zoukankan      html  css  js  c++  java
  • 5-17 汉诺塔的非递归实现 (25分)

    5-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


    -------------------------------
    汉若塔问题的递归求解代码如下
     1 #include <stdio.h>
     2 
     3 void move(char x, int n, char y)
     4 {
     5     printf("put %d from %c to %c
    ", n, x, y);
     6 }
     7 
     8 void hanoi(int n, char x, char y, char z)
     9 {
    10     if(n == 1)
    11         move(x, 1, z);
    12     else
    13     {
    14         hanoi(n-1, x, z, y);
    15         move(x, n, z);
    16         hanoi(n-1, y, x, z);
    17     }
    18 }
    19 
    20 int main()
    21 {
    22     int n;
    23     scanf("%d", &n);
    24     hanoi(n, 'a', 'b', 'c');
    25 }

    非递归求解,目前还不会……

     
  • 相关阅读:
    ansible
    爬虫框架之scrapy
    Mongodb
    xml 创建 添加节点或属性(自定义,复制)
    web站点崩溃的原因总结
    C# 关闭正在执行的文件
    254. Factor Combinations
    256. Paint House
    156. Binary Tree Upside Down
    170. Two Sum III
  • 原文地址:https://www.cnblogs.com/hello-lijj/p/7229555.html
Copyright © 2011-2022 走看看