Java非递归汉诺塔的代码
时间: 2024-10-13 11:06:39 浏览: 27
在Java中,非递归实现汉诺塔(Hanoi Tower)是一个经典的问题,通常通过栈来模拟递归过程。下面是一个简单的代码示例:
```java
import java.util.Stack;
public class Hanoi {
public static void hanoi(int n, char fromRod, char toRod, char auxRod) {
Stack<Integer> stack = new Stack<>();
stack.push(n);
while (!stack.isEmpty()) {
int numToMove = stack.pop();
for (int i = 1; i <= numToMove; i++) {
moveDisk(fromRod, toRod, auxRod);
if (numToMove - i > 0) {
stack.push(numToMove - i); // 将剩余的盘子推入栈中
}
}
}
}
private static void moveDisk(char from, char to, char aux) {
System.out.println("Moving disk " + from + " to " + to);
// 模拟移动操作,这里只是一个标记,实际上不需要实际移动
}
public static void main(String[] args) {
int disks = 3; // 你想移动的盘子数,可以更改这个值
hanoi(disks, 'A', 'C', 'B'); // A、B、C 分别代表源、辅助和目标柱子
}
}
```
在这个代码中,`hanoi`函数是主函数,它首先将所有盘子的层数压入栈中。然后进入循环,每次从栈顶取出一层,将上面的盘子依次移动到辅助位置,再将最下层的盘子移动到目标位置。当一层处理完后,剩余部分再次压回栈中,直到所有的盘子都完成转移。
阅读全文