java经典算法系列.docx

上传人:b****5 文档编号:4355403 上传时间:2022-11-30 格式:DOCX 页数:35 大小:28.01KB
下载 相关 举报
java经典算法系列.docx_第1页
第1页 / 共35页
java经典算法系列.docx_第2页
第2页 / 共35页
java经典算法系列.docx_第3页
第3页 / 共35页
java经典算法系列.docx_第4页
第4页 / 共35页
java经典算法系列.docx_第5页
第5页 / 共35页
点击查看更多>>
下载资源
资源描述

java经典算法系列.docx

《java经典算法系列.docx》由会员分享,可在线阅读,更多相关《java经典算法系列.docx(35页珍藏版)》请在冰豆网上搜索。

java经典算法系列.docx

java经典算法系列

Java算法之经典题目篇(转自瓢虫论坛橡树心)

  现在先推出比较经典问题的Java算法,过段时间会继续推出,关于查询,数列,

排序之类的java算法。

谢谢大家。

应版主要求我一楼放个目录,呵呵。

1:

费式数列

2:

巴斯卡三角形

3:

三色棋

4:

老鼠走迷宫

5:

骑士走棋盘

6:

八个皇后

7:

八枚银币

8:

生命游戏

9:

字符串核对

10:

双色,三色河内塔

11:

背包问题

12:

河内塔

费式数列(Fibonacci)

问题说明:

    Fibonacci为1200年代的欧洲数学家,在他的著作中曾经提到:

若有一只兔子每个月生一只小兔子,一个月后小兔子也开始生产。

起初只有一只兔子,一个月后就有两只兔子,两个月后有三只兔子,三个月后有五只兔子(小兔子投入生产)……

  这就是Fibonacci数列,一般习惯称之为费式数列,例如:

1,1,2,3,5,8,13,21,34,55,89,……

算法代码(Java):

1.publicclassFibonacci{

2.  publicstaticvoidmain(String[]args){

3.      int[]fib=newint[20]; 

4.

5.      fib[0]=0; 

6.      fib[1]=1; 

7.

8.      for(inti=2;i

9.        fib[i]=fib[i-1]+fib[i-2]; 

10.

11.      for(inti=0;i

12.        System.out.print(fib[i]+""); 

13.      System.out.println();

14.  }

15.}

巴斯卡三角形(Pascal)

问题说明:

  巴斯卡(Pascal)三角形基本上就是在解nCr ,因为三角形上的每一个数字各对应一个nCr ,其中n为row,而r为colnmu,

算法代码(Java):

1.

2.importjava.awt.*; 

3.importjavax.swing.*; 

4.

5.publicclassPascalextendsJFrame{ 

6.  publicPascal(){ 

7.      setBackground(Color.white); 

8.      setTitle("巴斯卡三角形"); 

9.      setSize(520,350); 

10.      setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

11.      show(); 

12.  } 

13.

14.  privatelongcombi(intn,intr){ 

15.      inti; 

16.      longp=1; 

17.

18.      for(i=1;i<=r;i++) 

19.        p=p*(n-i+1)/i; 

20.  

21.      returnp; 

22.  } 

23.

24.  publicvoidpaint(Graphicsg){ 

25.      finalintN=12; 

26.      intn,r,t; 

27.

28.      for(n=0;n<=N;n++){ 

29.        for(r=0;r<=n;r++) 

30.          g.drawString(""+combi(n,r), 

31.              (N-n)*20+r*40,n*20+50); 

32.      } 

33.  } 

34.

35.  publicstaticvoidmain(Stringargs[]){ 

36.      Pascalfrm=newPascal(); 

37.  } 

38.}

三色旗(ThreeColorFlags)

问题说明:

      三色旗的问题最早由E.W.Dijkstra所提出,塔所使用的用语为DutchNationFlag(Dijkstra为荷兰人),而多数的作者则使用Three-ColorFlag来说明。

假设有一条绳子,上面有红,白,蓝三种颜色的旗子,起初绳子上的旗子颜色并没有顺序,您希望将之分类,并排列蓝,白,红的顺序,要如何移动次数才会最少,注意您只能在绳子上进行这个动作,而且一次只能调换两个旗子。

算法代码(Java):

1.importjava.io.*;

2.

3.publicclassThreeColorsFlags{

4.  privatevoidswap(char[]flags,intx,inty){

5.      chartemp;

6.      temp=flags[x];

7.      flags[x]=flags[y];

8.      flags[y]=temp;

9.  }

10.   

11.  publicStringmove(char[]flags){

12.      intwFlag=0;

13.      intbFlag=0;

14.      intrFlag=flags.length-1;

15.   

16.      while(wFlag<=rFlag){

17.        if(flags[wFlag]=='W'){

18.          wFlag++;

19.        }

20.        elseif(flags[wFlag]=='B'){

21.          swap(flags,bFlag,wFlag);

22.          bFlag++;

23.          wFlag++;

24.        }

25.        else{

26.          while(wFlag

27.              rFlag--;

28.          swap(flags,rFlag,wFlag);

29.          rFlag--;           

30.        }

31.      }

32.      

33.      returnnewString(flags);

34.  }

35.   

36.  publicstaticvoidmain(String[]args) 

37.                      throwsIOException{      

38.      BufferedReaderbuf; 

39.      buf=newBufferedReader(

40.              newInputStreamReader(System.in)); 

41.

42.      System.out.print("输入三色旗顺序(ex.RWBBWRWR):

");

43.      Stringflags=buf.readLine();

44.      

45.      ThreeColorsFlagsthreeColorsFlag=newThreeColorsFlags();

46.      flags=threeColorsFlag.move(

47.            flags.toUpperCase().toCharArray());

48.      

49.      System.out.println("移动顺序后:

"+flags);      

50.  }

51.}

老鼠走迷宫(Mouse)

问题说明:

      老鼠走迷宫是循环求解的基本类型,我们在二维数组中用2来表示迷宫的墙壁,使用1来表示老鼠的行走路径,并用程序求出从入口到出口的距离。

算法代码(Java):

1.publicclassMouse{

2.  privateintstartI,startJ;  //入口 

3.  privateintendI,endJ;  //出口

4.  privatebooleansuccess=false;

5.   

6.  publicstaticvoidmain(String[]args){

7.      int[][]maze={{2,2,2,2,2,2,2}, 

8.                {2,0,0,0,0,0,2}, 

9.                {2,0,2,0,2,0,2}, 

10.                {2,0,0,2,0,2,2}, 

11.                {2,2,0,2,0,2,2}, 

12.                {2,0,0,0,0,0,2}, 

13.                {2,2,2,2,2,2,2}};

14.      

15.      System.out.println("显示迷宫:

"); 

16.      for(inti=0;i

17.        for(intj=0;j

18.          if(maze[j]==2) 

19.              System.out.print("█"); 

20.          else 

21.              System.out.print("  "); 

22.        System.out.println(); 

23.      }

24.

25.      Mousemouse=newMouse();

26.      mouse.setStart(1,1);

27.      mouse.setEnd(5,5);

28.      

29.      if(!

mouse.go(maze)){

30.        System.out.println("\n没有找到出口!

");

31.      }

32.      else{

33.        System.out.println("\n找到出口!

");

34.        for(inti=0;i

35.          for(intj=0;j

36.              if(maze[j]==2) 

37.                System.out.print("█"); 

38.              elseif(maze[j]==1) 

39.                System.out.print("◇"); 

40.              else 

41.                System.out.print("  "); 

42.          } 

43.          System.out.println(); 

44.        }        

45.      }

46.  }

47.   

48.  publicvoidsetStart(inti,intj){

49.      this.startI=i;

50.      this.startJ=j;

51.  }

52.   

53.  publicvoidsetEnd(inti,intj){

54.      this.endI=i;

55.      this.endJ=j;

56.  }

57.   

58.  publicbooleango(int[][]maze){

59.      returnvisit(maze,startI,startJ);

60.  }

61.   

62.  privatebooleanvisit(int[][]maze,inti,intj){

63.      maze[j]=1; 

64.

65.      if(i==endI&&j==endJ) 

66.        success=true; 

67.

68.      if(!

success&&maze[j+1]==0) 

69.        visit(maze,i,j+1); 

70.      if(!

success&&maze[i+1][j]==0)

71.        visit(maze,i+1,j); 

72.      if(!

success&&maze[j-1]==0)

73.        visit(maze,i,j-1); 

74.      if(!

success&&maze[i-1][j]==0)

75.        visit(maze,i-1,j); 

76.

77.      if(!

success) 

78.        maze[j]=0; 

79.      

80.      returnsuccess; 

81.  }

82.}

复制代码

    

    由于迷宫的设计,老鼠从迷宫的入口到出口的路径可能不只一条,下面我们显示所有路径。

1.publicclassMouse{

2.  privateintstartI,startJ;  //入口 

3.  privateintendI,endJ;  //出口

4.   

5.  publicstaticvoidmain(String[]args){

6.      intmaze[][]={{2,2,2,2,2,2,2,2,2},

7.                {2,0,0,0,0,0,0,0,2},

8.                {2,0,2,2,0,2,2,0,2},

9.                {2,0,2,0,0,2,0,0,2},

10.                {2,0,2,0,2,0,2,0,2},

11.                {2,0,0,0,0,0,2,0,2},

12.                {2,2,0,2,2,0,2,2,2},

13.                {2,0,0,0,0,0,0,0,2},

14.                {2,2,2,2,2,2,2,2,2}};

15.      

16.      System.out.println("显示迷宫:

"); 

17.      for(inti=0;i

18.        for(intj=0;j

19.          if(maze[i][j]==2) 

20.              System.out.print("█"); 

21.          else 

22.              System.out.print("  "); 

23.        System.out.println(); 

24.      }

25.

26.      Mousemouse=newMouse();

27.      mouse.setStart(1,1);

28.      mouse.setEnd(7,7);

29.      

30.      mouse.go(maze);

31.  }

32.   

33.  publicvoidsetStart(inti,intj){

34.      this.startI=i;

35.      this.startJ=j;

36.  }

37.   

38.  publicvoidsetEnd(inti,intj){

39.      this.endI=i;

40.      this.endJ=j;

41.  }

42.   

43.  publicvoidgo(int[][]maze){

44.      visit(maze,startI,startJ);

45.  }

46.   

47.  privatevoidvisit(int[][]maze,inti,intj){

48.      maze[i][j]=1; 

49.

50.      if(i==endI&&j==endJ){

51.        System.out.println("\n找到出口!

");

52.        for(intm=0;m

53.          for(intn=0;n

54.              if(maze[m][n]==2) 

55.                System.out.print("█"); 

56.              elseif(maze[m][n]==1) 

57.                System.out.print("◇"); 

58.              else 

59.                System.out.print("  "); 

60.          } 

61.          System.out.println();

62.        }

63.      }

64.

65.      if(maze[i][j+1]==0) 

66.        visit(maze,i,j+1); 

67.      if(maze[i+1][j]==0)

68.        visit(maze,i+1,j); 

69.      if(maze[i][j-1]==0)

70.        visit(maze,i,j-1); 

71.      if(maze[i-1][j]==0)

72.        visit(maze,i-1,j); 

73.     

74.      maze[i][j]=0;

75.  }

76.}

骑士走棋盘(Knighttour)

问题说明:

骑士游戏,在十八世纪倍受数学家与拼图迷的注意,骑士的走法为西洋棋的走发,骑士可以由任何一个位置出发,它要如何走完所有的位置。

算法代码(Java):

1.publicclassKnight{

2.  publicbooleantravel(intstartX, 

3.                  intstartY,int[][]board){

4.      //对应骑士可以走的八个方向

5.      int[]ktmove1={-2,-1,1,2,2,1,-1,-2};

6.      int[]ktmove2={1,2,2,1,-1,-2,-2,-1};

7.      

8.      //下一个出路的位置      int[]nexti=

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 经管营销 > 公共行政管理

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1