Java 河内塔楼:寻找第n个配置
考虑到光盘的数量和移动的数量,我想在河内塔问题的解决方案中找到第n个配置 以下代码使用尾部递归查找第n个移动:Java 河内塔楼:寻找第n个配置,java,algorithm,tail-recursion,towers-of-hanoi,Java,Algorithm,Tail Recursion,Towers Of Hanoi,考虑到光盘的数量和移动的数量,我想在河内塔问题的解决方案中找到第n个配置 以下代码使用尾部递归查找第n个移动: public static String N_th_Move(int k_discs, int move){ return HanoiRec(k_discs, move, "A", "B", "C"); } private static String HanoiRec(int k_discs, int move, String rod_a, St
public static String N_th_Move(int k_discs, int move){
return HanoiRec(k_discs, move, "A", "B", "C");
}
private static String HanoiRec(int k_discs, int move, String rod_a, String rod_b, String rod_c) {
int max_n_moves = (int) (Math.pow(2, k_discs) - 1);
int bound =(int) Math.pow(2, k_discs - 1);
if(move > max_n_moves){
return "Not valid";
} else if(move == bound ){
return rod_a + " -> " + rod_b;
} else if(move < bound){
return HanoiRec(k_discs-1, move , rod_a, rod_c, rod_b);
} else {
return HanoiRec(k_discs-1, move - bound, rod_c, rod_b, rod_a);
}
}
其中,第一个数字是杆_a上的盘数,第二个是杆_b上的盘数,第三个是杆_c上的盘数。
左下叶是第一次移动后的配置,右下叶是最后一次移动后的配置。
我没有找到所有配置之间的关系。ToH的标准解决方案是交替两种类型的移动:
1
位。例如,对于3盘问题:
Move binary disc
1 001 1
2 010 2
3 011 1
4 100 3
5 101 1
6 110 2
7 111 1
要查找与任何移动匹配的位置N
:
1
位的所有位李>
结果是每个光盘所在列的列表。ToH的标准解决方案是交替两种移动:
1
位。例如,对于3光盘问题:
Move binary disc
1 001 1
2 010 2
3 011 1
4 100 3
5 101 1
6 110 2
7 111 1
要查找与任何移动匹配的位置N
:
1
位的所有位结果是每个光盘所在列的列表。您能解释一下这些配置是什么吗?您需要跟踪状态,以便在第n步完成后可以输出。许多关于河内塔的帖子都有问题,甚至可能是一个问题。这可能不是详细的,但看起来是正确的。@JimMischel
您需要跟踪状态,以便在进行第n次移动时可以输出状态。
为什么?如果只进行了正确的移动,则模式是确定的。由于模式是确定的,每个位置都可以与索引关联。然后,只需找到将索引与模式关联的算法。您能解释一下吗这些配置是什么?它们的意思是什么?你需要跟踪状态,以便在第n次移动时可以输出。许多关于河内塔的帖子都有问题,甚至可能是一个问题。这可能没有详细研究,但看起来是正确的。@JimMischel你需要跟踪状态,以便在第n次移动完成后可以输出它制作。
为什么?如果只进行了正确的移动,则模式是确定的。由于模式是确定的,每个位置都可以与索引关联。然后,只需找到将索引与模式关联的算法即可。