package com.brzhang; /** * 漢諾塔 * 開始盤子所有都放在第一根柱子上 * 目的:將第一根柱子上的盤子所有移動到第三根柱子上,規則是不能編號較大的盤子放在編號交小的盤子上面。 * */ public class HanoTa { private long steps = 1l; /** * * @param n 盤子個數 * @param from 第一根柱子 * @param assist 第二根柱子 * @param to 第三根柱子 */ public void hannota(int n,char from ,char assist,char to){ if(n == 1){ move(n,from,to); } else{ //將上面的n-1個盤子從from柱子移動到assist柱子,藉助to柱子 hannota(n-1,from,to,assist); //將最低下的盤子從from柱子移動到to柱子 move(n,from,to); //將其他的n-1個盤子從assite柱子移動到to柱子藉助from柱子 hannota(n-1,assist,from,to); } } /** * 移動盤子,從from移動到to藉助assite * * @param from * @param to */ public void move(int n,char from,char to){ System.out.printf("steps " +(steps++) +" move [pantzi "+n+ "] from "+from+" to "+to+"\n"); } public static void main(String[] args) { new HanoTa().hannota(10,'A','B','C'); } }