Java语言怎么用队列的方式实现汉诺塔的移动求解

Java语言怎么用队列的方式实现汉诺塔的移动求解?双向队列怎么解决汉诺塔的问题的呢?定义和实现,计算的做法

看下是这个意思不 :

img

代码如下 :

import java.util.LinkedList;
import java.util.Queue;

public class HanoiTower {
    public static void hanoiTower(int n, char start, char auxiliary, char end) {
        Queue<String> queue = new LinkedList<>();
        // 将初始移动任务加入队列
        String task = n + " " + start + " " + auxiliary + " " + end;
        queue.offer(task);

        while (!queue.isEmpty()) {
            // 取出队列中的任务
            String currentTask = queue.poll();
            String[] parts = currentTask.split(" ");
            int disk = Integer.parseInt(parts[0]);
            char from = parts[1].charAt(0);
            char to = parts[3].charAt(0);

            if (disk == 1) {
                // 只有一个盘子时直接移动
                System.out.println("将第1个盘子从柱子" + from + "移动到柱子" + to);
            } else {
                // 将当前任务拆分为三个子任务,分别放入队列中
                char other = getOther(from, to);
                String task1 = (disk - 1) + " " + from + " " + to + " " + other;
                String task2 = "1 " + from + " " + other + " " + to;
                String task3 = (disk - 1) + " " + other + " " + from + " " + to;
                queue.offer(task1);
                queue.offer(task2);
                queue.offer(task3);
            }
        }
    }

    private static char getOther(char from, char to) {
        if ((from == 'A' && to == 'B') || (from == 'B' && to == 'A')) {
            return 'C';
        } else if ((from == 'A' && to == 'C') || (from == 'C' && to == 'A')) {
            return 'B';
        } else {
            return 'A';
        }
    }

    public static void main(String[] args) {
        int n = 3;
        hanoiTower(n, 'A', 'B', 'C');
    }
}


思路 :
代码中定义了一个名为hanoiTower的静态方法,它使用队列来实现汉诺塔的移动求解,参数n表示盘子的数量,start表示初始柱子,auxiliary表示辅助柱子,end表示目标柱子。
demo中创建一个LinkedList作为队列来存储移动任务,将初始移动任务加入队列后,进入循环,不断从队列中取出任务并执行,如果当前任务只有一个盘子,则直接进行移动操作,否则将当前任务拆分为三个子任务,并将子任务加入队列中,拆分子任务时,需要根据当前柱子和目标柱子确定辅助柱子的位置。
demo中初始的盘子数量为3,初始柱子为A,辅助柱子为B,目标柱子为C。
双向队列,它可以从两端进行插入和删除操作。在汉诺塔问题中,我们只需要按照固定顺序执行操作,那么使用普通的队列已经足够啦,双向队列并不能提供额外的好处,所以普通队列就可以解决汉诺塔问题,帅!!!!!