gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 09:12:59 27 4
gpt4 key购买 nike

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

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com