java - java中汉诺塔的打印函数

标签 java

我应该在控制台中显示我的汉诺塔算法的每一步。我已经设法让程序给出用 n 个磁盘完成算法所需的步骤数。即使这对于这项任务可能没有用。

每个磁盘 b 应使用 2b-1 个哈希值('#')表示,步骤应以'---'分隔

这就是 n=3 时的样子。

  #
 ###
#####
---
 ###
#####               #
---
#####    ###        #
---
          #
#####    ###
---
          #
         ###     #####
---

 #       ###      #####
---
                   ###
#                 #####
---
                    #
                   ###
                  #####

这是我的算法:

public static long move(int n, HanoiStack a, HanoiStack c, HanoiStack b){   
    long count = 0;

    if(n > 0){              
        count = count + move(n - 1, a, b, c);
        c.hanoiPush(a.pop());                  
        count = count + move(n - 1, b, c, a);

    }
    if(n >= 1){
        count++;           // because of recursivity
    }
    return count;
}

我非常感谢任何提示,因为我不知道如何开始。

最佳答案

听起来像是我的大学作业之一,只不过教授为我们编写了打印功能。

通常,为此类问题编写可视化器类或打印机类以进行可视化是一个好主意。

我建议您编写一个 print_game_state(stack a, stack b, stack c) 函数,而不是将其构建到您的算法中,因为这会让事情变得困惑。

我不知道 HanoiStack 是什么类型的对象,但你会得到这样的每个元素:

//pseudo code
print a[0] + "\t" + b[0] + "\t" + c[0];
print a[1] + "\t" + b[1] + "\t" + c[1];
print a[2] + "\t" + b[2] + "\t" + c[2];

即像打印机打印到页面上一样打印每个堆栈的行。

您可以执行一个 print_row(int n) 函数,该函数仅打印底部、顶部或传递给它的任何一行,并递归调用该函数以使其更加简单。

关于java - java中汉诺塔的打印函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21216700/

相关文章:

java - 如何使用 JAX-RS 从我的 Java 服务器端返回一个 Zip 文件?

java - 为 HTTPS 连接设置 https.protocols 系统属性的问题

java - Netty 连接到 unix 域套接字失败

java - Android:在两个 Activity 之间传递文件路径

用于检查直线是否与形状相交的 Java 类

java - 更新 JLabel 图标会弄乱背景

java - 当涉及内部类时,Java 继承如何工作

java - 具有本地代码库的 JNLP - 如何更新?

java - 在下面的例子中断言

java - System.out.printf 和 String.format 的区别