[程序员的常用算法]分治算法-汉诺塔
作者:互联网
1.背景
面试中经常问到算法......
2.代码
package com.ldp.algorithm.demo01; import org.junit.Test; /** * @create 05/15 11:55 * @description <p> * 分治算法 * 汉若塔游戏实现 * 假设有A,B,C三个柱子,把A上的n个盘全部移动到C柱子上,要求小盘上不能放大盘,可以借助中间盘B过度 * 思路分析: * 1.如果n=1,直接A移动到C * 2.n>=2,则把A上的盘分为2个部分,最底下的第n个盘,上面的所有盘从0到n-1个 * 移动思路 * 1.先把上面的n-1个盘: A->B * 2.再把最底下的盘: A->C * 3.最后把B上的所有盘:B->C * * </p> */ public class Test02HanRuoTa { int count = 0; @Test public void test01() { move(3, "A", "B", "C"); } /** * 汉若塔移动方法 * * @param num 需要移动的汉若塔个数 * @param a 需要移动的柱子 * @param b 用来过度的柱子 * @param c 移动到的柱子 */ public void move(int num, String a, String b, String c) { if (num == 1) { // 1.如果n=1,直接A移动到C System.out.println("第 " + (++count) + " 次移动,由 " + a + "到" + c); } else { // .n>=2,则把A上的盘分为2个部分,最底下的第n个盘,上面的所有盘从0到n-1个 // 1.先把上面的n-1个盘: A->B move(num - 1, a, c, b); // 2.再把最底下的盘: A->C System.out.println("第 " + (++count) + " 次移动,由 " + a + "到" + c); // 3.最后把B上的所有盘:B->C move(num - 1, b, a, c); } } }
完美!
标签:柱子,个盘,move,param,程序员,算法,num,汉诺塔,移动 来源: https://www.cnblogs.com/butingxue/p/16294849.html