我应该在控制台中显示我的汉诺塔算法的每一步。我已经设法让程序给出用 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/