java汉诺塔暂停_玩一下java,顺便写了下汉诺塔问题,两种方法实现。

1

1fa987a29c6482f53d401256f96355eb.png

ca75c07623e1b494fee67e8f316fc310.gifpublicclassHanoi_X8023Z9b8a8a44dd1c74ae49c20a7cd451974e.png{2d18c02628675d0a2c816449d98bda930.png/// 3d18c02628675d0a2c816449d98bda930.png/// 将n个盘从one座借助two座,移动到three座.4d18c02628675d0a2c816449d98bda930.png/// 5d18c02628675d0a2c816449d98bda930.png/// 盘子个数6d18c02628675d0a2c816449d98bda930.png/// 第一个标识座A7d18c02628675d0a2c816449d98bda930.png/// 第二个标识座B8d18c02628675d0a2c816449d98bda930.png/// 第三个标识座C9d18c02628675d0a2c816449d98bda930.pngvoidhanoi(intn, String one, String two, String three)1097e794c86028c5f5b5461ae5ef440a4c.png

3c6cafce68eb941a00f1998f1d3d3aa6.gif9b8a8a44dd1c74ae49c20a7cd451974e.png{11d18c02628675d0a2c816449d98bda930.pngif(n==1)1297e794c86028c5f5b5461ae5ef440a4c.png

3c6cafce68eb941a00f1998f1d3d3aa6.gif9b8a8a44dd1c74ae49c20a7cd451974e.png{13d18c02628675d0a2c816449d98bda930.png            move(one, three);//从A座移动到C座14ecedf933ec37d714bd4c2545da43add2.png}15d18c02628675d0a2c816449d98bda930.pngelse1697e794c86028c5f5b5461ae5ef440a4c.png

3c6cafce68eb941a00f1998f1d3d3aa6.gif9b8a8a44dd1c74ae49c20a7cd451974e.png{17d18c02628675d0a2c816449d98bda930.png            hanoi(n-1, one, three, two);//将A上n-1个盘借助于C座先移动到B座上18d18c02628675d0a2c816449d98bda930.pngmove(one, three);19d18c02628675d0a2c816449d98bda930.png            hanoi(n-1, two, one, three);//将n-1个盘从B借助于A座移动到C座上20ecedf933ec37d714bd4c2545da43add2.png}21d18c02628675d0a2c816449d98bda930.png22ecedf933ec37d714bd4c2545da43add2.png    }23d18c02628675d0a2c816449d98bda930.png24d18c02628675d0a2c816449d98bda930.png/// 25d18c02628675d0a2c816449d98bda930.png/// 并未真正移动盘子,只是打印出移盘的方案26d18c02628675d0a2c816449d98bda930.png/// 27d18c02628675d0a2c816449d98bda930.png/// from从哪个座开始移28d18c02628675d0a2c816449d98bda930.png/// to移动到哪个座29d18c02628675d0a2c816449d98bda930.pngvoidmove(String x, String y)3097e794c86028c5f5b5461ae5ef440a4c.png

3c6cafce68eb941a00f1998f1d3d3aa6.gif9b8a8a44dd1c74ae49c20a7cd451974e.png{31d18c02628675d0a2c816449d98bda930.png        FormatStr(x+y);32d18c02628675d0a2c816449d98bda930.png        System.out.println(strA+"\n"+strB+"\n"+strC+"\n");33ecedf933ec37d714bd4c2545da43add2.png    }34d18c02628675d0a2c816449d98bda930.png35d18c02628675d0a2c816449d98bda930.png//定义三个字符串36d18c02628675d0a2c816449d98bda930.pngprivateString strA="0";//A座37d18c02628675d0a2c816449d98bda930.pngprivateString strB="0";//B座38d18c02628675d0a2c816449d98bda930.pngprivateString strC="0";//C座39d18c02628675d0a2c816449d98bda930.pngprivateint_long=5;//初始值40d18c02628675d0a2c816449d98bda930.png41d18c02628675d0a2c816449d98bda930.png/// 42d18c02628675d0a2c816449d98bda930.png/// 格式化字符串43d18c02628675d0a2c816449d98bda930.png/// 44d18c02628675d0a2c816449d98bda930.png/// 字符串类型45d18c02628675d0a2c816449d98bda930.pngpublicvoidFormatStr(String strType)4697e794c86028c5f5b5461ae5ef440a4c.png

3c6cafce68eb941a00f1998f1d3d3aa6.gif9b8a8a44dd1c74ae49c20a7cd451974e.png{47d18c02628675d0a2c816449d98bda930.png        remove0();48d18c02628675d0a2c816449d98bda930.png49d18c02628675d0a2c816449d98bda930.pngif(strType .equals("AB"))5097e794c86028c5f5b5461ae5ef440a4c.png

3c6cafce68eb941a00f1998f1d3d3aa6.gif9b8a8a44dd1c74ae49c20a7cd451974e.png{51d18c02628675d0a2c816449d98bda930.png            strB=strB+strA.substring(strA.length()-1, strA.length());52d18c02628675d0a2c816449d98bda930.png            strA=strA.substring(0, strA.length()-1);53d18c02628675d0a2c816449d98bda930.png54ecedf933ec37d714bd4c2545da43add2.png        }55d18c02628675d0a2c816449d98bda930.pngelseif(strType .equals("AC"))5697e794c86028c5f5b5461ae5ef440a4c.png

3c6cafce68eb941a00f1998f1d3d3aa6.gif9b8a8a44dd1c74ae49c20a7cd451974e.png{57d18c02628675d0a2c816449d98bda930.png            strC=strC+strA.substring(strA.length()-1, strA.length());58d18c02628675d0a2c816449d98bda930.png            strA=strA.substring(0, strA.length()-1);59d18c02628675d0a2c816449d98bda930.png60ecedf933ec37d714bd4c2545da43add2.png        }61d18c02628675d0a2c816449d98bda930.pngelseif(strType .equals("BA"))6297e794c86028c5f5b5461ae5ef440a4c.png

3c6cafce68eb941a00f1998f1d3d3aa6.gif9b8a8a44dd1c74ae49c20a7cd451974e.png{63d18c02628675d0a2c816449d98bda930.png            strA=strA+strB.substring(strB.length()-1, strB.length());64d18c02628675d0a2c816449d98bda930.png            strB=strB.substring(0, strB.length()-1);65ecedf933ec37d714bd4c2545da43add2.png        }66d18c02628675d0a2c816449d98bda930.pngelseif(strType .equals("BC"))6797e794c86028c5f5b5461ae5ef440a4c.png

3c6cafce68eb941a00f1998f1d3d3aa6.gif9b8a8a44dd1c74ae49c20a7cd451974e.png{68d18c02628675d0a2c816449d98bda930.png            strC=strC+strB.substring(strB.length()-1, strB.length());69d18c02628675d0a2c816449d98bda930.png            strB=strB.substring(0, strB.length()-1);70ecedf933ec37d714bd4c2545da43add2.png        }71d18c02628675d0a2c816449d98bda930.pngelseif(strType .equals("CA"))7297e794c86028c5f5b5461ae5ef440a4c.png

3c6cafce68eb941a00f1998f1d3d3aa6.gif9b8a8a44dd1c74ae49c20a7cd451974e.png{73d18c02628675d0a2c816449d98bda930.png            strA=strA+strC.substring(strC.length()-1, strC.length());74d18c02628675d0a2c816449d98bda930.png            strC=strC.substring(0, strC.length()-1);75ecedf933ec37d714bd4c2545da43add2.png        }76d18c02628675d0a2c816449d98bda930.pngelseif(strType .equals("CB"))7797e794c86028c5f5b5461ae5ef440a4c.png

3c6cafce68eb941a00f1998f1d3d3aa6.gif9b8a8a44dd1c74ae49c20a7cd451974e.png{78d18c02628675d0a2c816449d98bda930.png            strB=strB+strC.substring(strC.length()-1, strC.length());79d18c02628675d0a2c816449d98bda930.png            strC=strC.substring(0, strC.length()-1);80ecedf933ec37d714bd4c2545da43add2.png        }81d18c02628675d0a2c816449d98bda930.png        Add0();82d18c02628675d0a2c816449d98bda930.png83ecedf933ec37d714bd4c2545da43add2.png    }84d18c02628675d0a2c816449d98bda930.png85d18c02628675d0a2c816449d98bda930.png/// 86d18c02628675d0a2c816449d98bda930.png/// 加087d18c02628675d0a2c816449d98bda930.png/// 88d18c02628675d0a2c816449d98bda930.pngpublicvoidAdd0()8997e794c86028c5f5b5461ae5ef440a4c.png

3c6cafce68eb941a00f1998f1d3d3aa6.gif9b8a8a44dd1c74ae49c20a7cd451974e.png{90d18c02628675d0a2c816449d98bda930.pngfor(inti=0; i<_long src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif">

3c6cafce68eb941a00f1998f1d3d3aa6.gif9b8a8a44dd1c74ae49c20a7cd451974e.png{92d18c02628675d0a2c816449d98bda930.pngif(i==strA.length())93d18c02628675d0a2c816449d98bda930.png                strA=strA+"0";94d18c02628675d0a2c816449d98bda930.pngif(i==strB.length())95d18c02628675d0a2c816449d98bda930.png                strB=strB+"0";96d18c02628675d0a2c816449d98bda930.pngif(i==strC.length())97d18c02628675d0a2c816449d98bda930.png                strC=strC+"0";98ecedf933ec37d714bd4c2545da43add2.png        }99ecedf933ec37d714bd4c2545da43add2.png   }100d18c02628675d0a2c816449d98bda930.png101d18c02628675d0a2c816449d98bda930.png/// 102d18c02628675d0a2c816449d98bda930.png/// 去0103d18c02628675d0a2c816449d98bda930.png/// 104d18c02628675d0a2c816449d98bda930.pngpublicvoidremove0()10597e794c86028c5f5b5461ae5ef440a4c.png

3c6cafce68eb941a00f1998f1d3d3aa6.gif9b8a8a44dd1c74ae49c20a7cd451974e.png{106d18c02628675d0a2c816449d98bda930.png        strA=strA.replace("0","");107d18c02628675d0a2c816449d98bda930.png        strB=strB.replace("0","");108d18c02628675d0a2c816449d98bda930.png        strC=strC.replace("0","");109ecedf933ec37d714bd4c2545da43add2.png    }110d18c02628675d0a2c816449d98bda930.png111d18c02628675d0a2c816449d98bda930.png/// 112d18c02628675d0a2c816449d98bda930.png/// 初始化字符串113d18c02628675d0a2c816449d98bda930.png/// 114d18c02628675d0a2c816449d98bda930.pngpublicvoidInitStr()11597e794c86028c5f5b5461ae5ef440a4c.png

3c6cafce68eb941a00f1998f1d3d3aa6.gif9b8a8a44dd1c74ae49c20a7cd451974e.png{116d18c02628675d0a2c816449d98bda930.pngfor(inti=_long; i>0; i--)11797e794c86028c5f5b5461ae5ef440a4c.png

3c6cafce68eb941a00f1998f1d3d3aa6.gif9b8a8a44dd1c74ae49c20a7cd451974e.png{118d18c02628675d0a2c816449d98bda930.png            strA+=String.valueOf(i);119d18c02628675d0a2c816449d98bda930.png            strB+="0";120d18c02628675d0a2c816449d98bda930.png            strC+="0";121ecedf933ec37d714bd4c2545da43add2.png        }122ecedf933ec37d714bd4c2545da43add2.png    }123d18c02628675d0a2c816449d98bda930.png12497e794c86028c5f5b5461ae5ef440a4c.png

3c6cafce68eb941a00f1998f1d3d3aa6.gifpublicstaticvoidmain(String[] args)9b8a8a44dd1c74ae49c20a7cd451974e.png{125d18c02628675d0a2c816449d98bda930.png//TODO Auto-generated method stub126d18c02628675d0a2c816449d98bda930.png//汉诺塔问题分析方法与解答127d18c02628675d0a2c816449d98bda930.png//问题:将n个盘子从A座移动到C座128d18c02628675d0a2c816449d98bda930.png//步骤1:将A座上n-1个盘借助C座先移动到B座上129d18c02628675d0a2c816449d98bda930.png//步骤2:把A座上剩下的一个盘移动到C座上130d18c02628675d0a2c816449d98bda930.png//步骤3:将n-1个盘从B座借助于A座移动到C座上131d18c02628675d0a2c816449d98bda930.png//上面第一步与第三步,都是把n-1个盘从一个座移动到另一个座上,采取的办法是一样的,只是座的名字不同而已132d18c02628675d0a2c816449d98bda930.png//对应关系如下:第一步:one--A two--B three--C;第三步:one--B two--C three--A133d18c02628675d0a2c816449d98bda930.png134d18c02628675d0a2c816449d98bda930.png        Hanoi_X8023Z hanoi_x8023z=newHanoi_X8023Z();//实例化数据排序对象135d18c02628675d0a2c816449d98bda930.pnghanoi_x8023z.InitStr();//初始化字符串136d18c02628675d0a2c816449d98bda930.pngString A="A";//第一个座A137d18c02628675d0a2c816449d98bda930.pngString B="B";//第二个座B138d18c02628675d0a2c816449d98bda930.pngString C="C";//第三个座C139d18c02628675d0a2c816449d98bda930.pngintn=5;//盘子个数140d18c02628675d0a2c816449d98bda930.pnghanoi_x8023z.hanoi(n,A,B,C);//调用汉诺塔排序方法141d18c02628675d0a2c816449d98bda930.pngSystem.out.println();142d18c02628675d0a2c816449d98bda930.png143ecedf933ec37d714bd4c2545da43add2.png    }1448f1ba5b45633e9678d1db480c16cae3f.png}1454f1150b881333f12a311ae9ef34da474.png

结果:

54320

00000

10000

54300

20000

10000

54300

21000

00000

54000

21000

30000

54100

20000

30000

54100

00000

32000

54000

00000

32100

50000

40000

32100

50000

41000

32000

52000

41000

30000

52100

40000

30000

52100

43000

00000

52000

43000

10000

50000

43200

10000

50000

43210

00000

00000

43210

50000

10000

43200

50000

10000

43000

52000

00000

43000

52100

30000

40000

52100

30000

41000

52000

32000

41000

50000

32100

40000

50000

32100

00000

54000

32000

00000

54100

30000

20000

54100

30000

21000

54000

00000

21000

54300

10000

20000

54300

10000

00000

54320

00000

00000

54321

1

4f1150b881333f12a311ae9ef34da474.pngimportjava.util.*;21fa987a29c6482f53d401256f96355eb.png

ca75c07623e1b494fee67e8f316fc310.gifpublicclasshanoi9b8a8a44dd1c74ae49c20a7cd451974e.png{3d18c02628675d0a2c816449d98bda930.png4d18c02628675d0a2c816449d98bda930.pngfinalstaticintHANOI_SIZE=5;//汉诺塔规模大小5d18c02628675d0a2c816449d98bda930.pngstaticintcount;//盘子搬动次数6d18c02628675d0a2c816449d98bda930.pngstaticHashtableabc;//泛型,记录柱子上的盘子状态,如:A-543217d18c02628675d0a2c816449d98bda930.png8d18c02628675d0a2c816449d98bda930.pngstaticvoidhanoi(intn, String x, String y, String z)997e794c86028c5f5b5461ae5ef440a4c.png

3c6cafce68eb941a00f1998f1d3d3aa6.gif9b8a8a44dd1c74ae49c20a7cd451974e.png{10d18c02628675d0a2c816449d98bda930.pngif(n==1)1197e794c86028c5f5b5461ae5ef440a4c.png

3c6cafce68eb941a00f1998f1d3d3aa6.gif9b8a8a44dd1c74ae49c20a7cd451974e.png{12d18c02628675d0a2c816449d98bda930.png            move(x,1, z);//将编号为1的盘从x移到z13ecedf933ec37d714bd4c2545da43add2.png}14d18c02628675d0a2c816449d98bda930.pngelse1597e794c86028c5f5b5461ae5ef440a4c.png

3c6cafce68eb941a00f1998f1d3d3aa6.gif9b8a8a44dd1c74ae49c20a7cd451974e.png{16d18c02628675d0a2c816449d98bda930.png            hanoi(n-1, x, z, y);//将x上编号为1至n-1的盘移动到y,z作为辅助17d18c02628675d0a2c816449d98bda930.pngmove(x, n, z);//将编号为n的圆盘从x移到z18d18c02628675d0a2c816449d98bda930.pnghanoi(n-1, y, x, z);//将y上编号为1至n-1的盘移动到z,x作为辅助19ecedf933ec37d714bd4c2545da43add2.png}20ecedf933ec37d714bd4c2545da43add2.png    }21d18c02628675d0a2c816449d98bda930.png22d18c02628675d0a2c816449d98bda930.png23d18c02628675d0a2c816449d98bda930.pngstaticvoidmove(String x,intn, String y)2497e794c86028c5f5b5461ae5ef440a4c.png

3c6cafce68eb941a00f1998f1d3d3aa6.gif9b8a8a44dd1c74ae49c20a7cd451974e.png{25d18c02628675d0a2c816449d98bda930.png        System.out.println("第"+++count+"次移动,把盘"+n+"从"+x+"-->"+y);26d18c02628675d0a2c816449d98bda930.png        abc.put(x, abc.get(x)/10);27d18c02628675d0a2c816449d98bda930.png        abc.put(y, abc.get(y)*10+n);28d18c02628675d0a2c816449d98bda930.png        System.out.println(Filter(abc.get("A"))+""+Filter(abc.get("B"))+""+Filter(abc.get("C")));29ecedf933ec37d714bd4c2545da43add2.png    }30d18c02628675d0a2c816449d98bda930.png31d18c02628675d0a2c816449d98bda930.png32d18c02628675d0a2c816449d98bda930.pngstaticString Filter(inti)3397e794c86028c5f5b5461ae5ef440a4c.png

3c6cafce68eb941a00f1998f1d3d3aa6.gif9b8a8a44dd1c74ae49c20a7cd451974e.png{34d18c02628675d0a2c816449d98bda930.pngreturnhanoi.rightFillMethod(String.valueOf(i),HANOI_SIZE);35ecedf933ec37d714bd4c2545da43add2.png    }36d18c02628675d0a2c816449d98bda930.png37d18c02628675d0a2c816449d98bda930.pngpublicstaticString rightFillMethod(String str,intj)//右补03897e794c86028c5f5b5461ae5ef440a4c.png

3c6cafce68eb941a00f1998f1d3d3aa6.gif9b8a8a44dd1c74ae49c20a7cd451974e.png{39d18c02628675d0a2c816449d98bda930.pngif(jreturnstr;41d18c02628675d0a2c816449d98bda930.pngfor(inti=0;i<=j-str.length();i++)42d18c02628675d0a2c816449d98bda930.png        str+="0";43d18c02628675d0a2c816449d98bda930.pngreturnstr;44ecedf933ec37d714bd4c2545da43add2.png    }45d18c02628675d0a2c816449d98bda930.png4697e794c86028c5f5b5461ae5ef440a4c.png

3c6cafce68eb941a00f1998f1d3d3aa6.gifpublicstaticvoidmain(String[] args)9b8a8a44dd1c74ae49c20a7cd451974e.png{47d18c02628675d0a2c816449d98bda930.png//初始化柱子状态,和搬动次数计数48d18c02628675d0a2c816449d98bda930.pngabc=newHashtable();49d18c02628675d0a2c816449d98bda930.png        abc.put("A",0);50d18c02628675d0a2c816449d98bda930.png        abc.put("B",0);51d18c02628675d0a2c816449d98bda930.png        abc.put("C",0);52d18c02628675d0a2c816449d98bda930.png53d18c02628675d0a2c816449d98bda930.png        count=0;54d18c02628675d0a2c816449d98bda930.png55d18c02628675d0a2c816449d98bda930.pngintsize;56d18c02628675d0a2c816449d98bda930.pngfor(size=HANOI_SIZE; size>0; size--)5797e794c86028c5f5b5461ae5ef440a4c.png

3c6cafce68eb941a00f1998f1d3d3aa6.gif9b8a8a44dd1c74ae49c20a7cd451974e.png{58d18c02628675d0a2c816449d98bda930.png            abc.put("A", abc.get("A")*10+size);59ecedf933ec37d714bd4c2545da43add2.png        }60d18c02628675d0a2c816449d98bda930.png        hanoi(HANOI_SIZE,"A","B","C");61d18c02628675d0a2c816449d98bda930.png        System.out.println();62ecedf933ec37d714bd4c2545da43add2.png    }63d18c02628675d0a2c816449d98bda930.png648f1ba5b45633e9678d1db480c16cae3f.png}654f1150b881333f12a311ae9ef34da474.png

结果:

第1次移动,把盘1从A --> C

54320 0000 1000

第2次移动,把盘2从A --> B

54300 2000 1000

第3次移动,把盘1从C --> B

54300 2100 0000

第4次移动,把盘3从A --> C

5400 2100 3000

第5次移动,把盘1从B --> A

54100 2000 3000

第6次移动,把盘2从B --> C

54100 0000 3200

第7次移动,把盘1从A --> C

5400 0000 32100

第8次移动,把盘4从A --> B

5000 4000 32100

第9次移动,把盘1从C --> B

5000 4100 3200

第10次移动,把盘2从C --> A

5200 4100 3000

第11次移动,把盘1从B --> A

52100 4000 3000

第12次移动,把盘3从C --> B

52100 4300 0000

第13次移动,把盘1从A --> C

5200 4300 1000

第14次移动,把盘2从A --> B

5000 43200 1000

第15次移动,把盘1从C --> B

5000 43210 0000

第16次移动,把盘5从A --> C

0000 43210 5000

第17次移动,把盘1从B --> A

1000 43200 5000

第18次移动,把盘2从B --> C

1000 4300 5200

第19次移动,把盘1从A --> C

0000 4300 52100

第20次移动,把盘3从B --> A

3000 4000 52100

第21次移动,把盘1从C --> B

3000 4100 5200

第22次移动,把盘2从C --> A

3200 4100 5000

第23次移动,把盘1从B --> A

32100 4000 5000

第24次移动,把盘4从B --> C

32100 0000 5400

第25次移动,把盘1从A --> C

3200 0000 54100

第26次移动,把盘2从A --> B

3000 2000 54100

第27次移动,把盘1从C --> B

3000 2100 5400

第28次移动,把盘3从A --> C

0000 2100 54300

第29次移动,把盘1从B --> A

1000 2000 54300

第30次移动,把盘2从B --> C

1000 0000 54320

第31次移动,把盘1从A --> C

0000 0000 543210

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值