java经典算法系列文档格式.docx
- 文档编号:17280353
- 上传时间:2022-11-30
- 格式:DOCX
- 页数:35
- 大小:28.01KB
java经典算法系列文档格式.docx
《java经典算法系列文档格式.docx》由会员分享,可在线阅读,更多相关《java经典算法系列文档格式.docx(35页珍藏版)》请在冰豆网上搜索。
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<
fib.length;
i++)
9.
fib[i]=fib[i-1]+fib[i-2];
10.
11.
for(inti=0;
12.
System.out.print(fib[i]+"
"
);
13.
System.out.println();
14.
}
15.}
巴斯卡三角形(Pascal)
巴斯卡(Pascal)三角形基本上就是在解nCr
,因为三角形上的每一个数字各对应一个nCr
,其中n为row,而r为colnmu,
1.
2.importjava.awt.*;
3.importjavax.swing.*;
5.publicclassPascalextendsJFrame{
publicPascal(){
7.
setBackground(Color.white);
setTitle("
巴斯卡三角形"
setSize(520,350);
10.
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
show();
}
13.
privatelongcombi(intn,intr){
15.
inti;
16.
longp=1;
17.
18.
for(i=1;
=r;
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){
chartemp;
temp=flags[x];
flags[x]=flags[y];
flags[y]=temp;
publicStringmove(char[]flags){
intwFlag=0;
intbFlag=0;
intrFlag=flags.length-1;
while(wFlag<
=rFlag){
17.
if(flags[wFlag]=='
W'
){
wFlag++;
}
elseif(flags[wFlag]=='
B'
swap(flags,bFlag,wFlag);
bFlag++;
23.
else{
while(wFlag<
rFlag&
&
flags[rFlag]=='
R'
)
27.
rFlag--;
swap(flags,rFlag,wFlag);
rFlag--;
returnnewString(flags);
34.
publicstaticvoidmain(String[]args)
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来表示老鼠的行走路径,并用程序求出从入口到出口的距离。
1.publicclassMouse{
privateintstartI,startJ;
//入口
privateintendI,endJ;
//出口
privatebooleansuccess=false;
int[][]maze={{2,2,2,2,2,2,2},
{2,0,0,0,0,0,2},
{2,0,2,0,2,0,2},
{2,0,0,2,0,2,2},
{2,2,0,2,0,2,2},
{2,2,2,2,2,2,2}};
显示迷宫:
maze.length;
i++){
for(intj=0;
j<
maze[0].length;
j++)
if(maze[j]==2)
█"
else
24.
Mousemouse=newMouse();
mouse.setStart(1,1);
mouse.setEnd(5,5);
if(!
mouse.go(maze)){
\n没有找到出口!
\n找到出口!
for(intj=0;
j++){
if(maze[j]==2)
elseif(maze[j]==1)
◇"
else
41.
System.out.println();
publicvoidsetStart(inti,intj){
this.startI=i;
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.
success&
maze[j+1]==0)
69.
visit(maze,i,j+1);
70.
maze[i+1][j]==0)
71.
visit(maze,i+1,j);
72.
maze[j-1]==0)
73.
visit(maze,i,j-1);
74.
maze[i-1][j]==0)
75.
visit(maze,i-1,j);
76.
77.
success)
78.
maze[j]=0;
79.
80.
returnsuccess;
81.
82.}
复制代码
由于迷宫的设计,老鼠从迷宫的入口到出口的路径可能不只一条,下面我们显示所有路径。
intmaze[][]={{2,2,2,2,2,2,2,2,2},
{2,0,0,0,0,0,0,0,2},
{2,0,2,2,0,2,2,0,2},
{2,0,2,0,0,2,0,0,2},
{2,0,2,0,2,0,2,0,2},
{2,0,0,0,0,0,2,0,2},
{2,2,0,2,2,0,2,2,2},
{2,2,2,2,2,2,2,2,2}};
if(maze[i][j]==2)
25.
mouse.setEnd(7,7);
mouse.go(maze);
publicvoidgo(int[][]maze){
visit(maze,startI,startJ);
privatevoidvisit(int[][]maze,inti,intj){
maze[i][j]=1;
49.
j==endJ){
for(intm=0;
m<
m++){
for(intn=0;
if(maze[m][n]==2)
elseif(maze[m][n]==1)
if(maze[i][j+1]==0)
67.
if(maze[i+1][j]==0)
if(maze[i][j-1]==0)
if(maze[i-1][j]==0)
maze[i][j]=0;
76.}
骑士走棋盘(Knighttour)
骑士游戏,在十八世纪倍受数学家与拼图迷的注意,骑士的走法为西洋棋的走发,骑士可以由任何一个位置出发,它要如何走完所有的位置。
1.publicclassKnight{
publicbooleantravel(intstartX,
intstartY,int[][]board){
//对应骑士可以走的八个方向
int[]ktmove1={-2,-1,1,2,2,1,-1,-2};
int[]ktmove2={1,2,2,1,-1,-2,-2,-1};
//下一个出路的位置
int[]nexti=
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- java 经典 算法 系列