java漢羅塔代碼 python漢羅塔代碼

求一個(gè)漢諾塔的JAVA代碼

public?class?Hannoi?{

創(chuàng)新互聯(lián)專(zhuān)注于安遠(yuǎn)網(wǎng)站建設(shè)服務(wù)及定制,我們擁有豐富的企業(yè)做網(wǎng)站經(jīng)驗(yàn)。 熱誠(chéng)為您提供安遠(yuǎn)營(yíng)銷(xiāo)型網(wǎng)站建設(shè),安遠(yuǎn)網(wǎng)站制作、安遠(yuǎn)網(wǎng)頁(yè)設(shè)計(jì)、安遠(yuǎn)網(wǎng)站官網(wǎng)定制、小程序開(kāi)發(fā)服務(wù),打造安遠(yuǎn)網(wǎng)絡(luò)公司原創(chuàng)品牌,更為您提供安遠(yuǎn)網(wǎng)站排名全網(wǎng)營(yíng)銷(xiāo)落地服務(wù)。

public?static?void?main(String[]?args)?{

int?nDisks?=?3;

moveDish(nDisks,?'A',?'B',?'C');

}

private?static?void?moveDish(int?level,?char?from,?char?inter,?char?to)?{

if?(level?==?1)?{

System.out.println("從"?+?from?+?"移動(dòng)盤(pán)子?"?+?level?+?"?號(hào)到"?+?to);

}?else?{

moveDish(level?-?1,?from,?to,?inter);

System.out.println("從"?+?from?+?"移動(dòng)盤(pán)子?"?+?level?+?"?號(hào)到"?+?to);

moveDish(level?-?1,?inter,?from,?to);

}

}

}

求JAVA漢諾塔相關(guān)的socket代碼

定義了服務(wù)器線(xiàn)程類(lèi),服務(wù)器運(yùn)行在一個(gè)單獨(dú)的線(xiàn)程中。

客戶(hù)端運(yùn)行在主線(xiàn)程中。

所有代碼放在一個(gè)源文件中就行。源文件名是Hanoi.java

下面是源代碼,輸入的盤(pán)子數(shù)不要太大,20以?xún)?nèi),否則會(huì)步數(shù)太多,輸出耗時(shí)太久。

import?java.io.BufferedReader;

import?java.io.IOException;

import?java.io.InputStreamReader;

import?java.io.PrintStream;

import?java.net.InetAddress;

import?java.net.ServerSocket;

import?java.net.Socket;

import?java.net.UnknownHostException;

import?java.util.Scanner;

public?class?Hanoi?{

public?static?void?main(String[]?args)?{

//創(chuàng)建服務(wù)器

HanoiServer?server?=?new?HanoiServer();

server.start();//啟動(dòng)服務(wù)器

/*開(kāi)始創(chuàng)建客戶(hù)端*/

Socket?socket?=?null;//客戶(hù)端Socket

try?{

socket?=?new?Socket(InetAddress.getLocalHost(),?8888);

BufferedReader?reader?=?new?BufferedReader(new?InputStreamReader(socket.getInputStream()));

PrintStream?printStream?=?new?PrintStream(socket.getOutputStream());

Scanner?scanner=new?Scanner(System.in);

System.out.println("請(qǐng)輸入盤(pán)子數(shù)(3-10),數(shù)字太大,運(yùn)算時(shí)間就會(huì)太長(zhǎng)可能會(huì)卡死。");

printStream.print(scanner.nextInt());

printStream.println();

String?line;

while?((line?=?reader.readLine())?!=?null)?{

System.out.println(line);

}

}?catch?(UnknownHostException?e)?{

e.printStackTrace();

}?catch?(IOException?e)?{

e.printStackTrace();

}?finally?{

if?(socket?!=?null)?{

try?{

socket.close();

System.out.println("客戶(hù)端socket關(guān)閉");

}?catch?(IOException?e)?{

e.printStackTrace();

}

}

}

}

}

class?HanoiServer?extends?Thread?{//服務(wù)器線(xiàn)程類(lèi)

private?ServerSocket?serverSocket;

public?HanoiServer()?{

try?{

this.serverSocket?=?new?ServerSocket(8888);

}?catch?(IOException?e)?{

e.printStackTrace();

}

}

private?void?hanoi(int?n,?String?from,?String?inter,?String?to,?PrintStream?printStream)?{

if?(n?==?1)?{

printStream.print("Disk?1?from?"?+?from?+?"?to?"?+?to);

printStream.println();

}?else?{

hanoi(n?-?1,?from,?to,?inter,?printStream);

printStream.print("Disk?"?+?n?+?"?from?"?+?from?+?"?to?"?+?to);

printStream.println();

hanoi(n?-?1,?inter,?from,?to,?printStream);

}

}

@Override

public?void?run()?{

Socket?socket?=?null;

try?{

socket?=?this.serverSocket.accept();

PrintStream?printStream?=?new?PrintStream(socket.getOutputStream());

BufferedReader?reader?=?new?BufferedReader(new?InputStreamReader(socket.getInputStream()));

int?n?=?Integer.parseInt(reader.readLine());

this.hanoi(n,?"A",?"B",?"C",?printStream);

}?catch?(IOException?e)?{

e.printStackTrace();

}?finally?{

if?(socket?!=?null)?{

try?{

socket.close();

System.out.println("服務(wù)器socket關(guān)閉");

}?catch?(IOException?e)?{

e.printStackTrace();

}

}

try?{

this.serverSocket.close();

System.out.println("服務(wù)器serverSocket關(guān)閉");

}?catch?(IOException?e)?{

e.printStackTrace();

}

}

}

}

java實(shí)現(xiàn)漢諾塔的代碼,求注釋?zhuān)唧w到每一行代碼,急求,,,

這樣應(yīng)該可以了

如果還有那個(gè)地方不懂的,建議你研究下漢諾塔算法

import

java.io.BufferedReader;//引入IO包中的BufferedReader

import

java.io.IOException;//引入IO包中的IO異常處理

import

java.io.InputStreamReader;//引入IO包中的InputStreaReader

public

class

Hinoi

{

//主類(lèi)

static

int

m=0;//定義移動(dòng)的次數(shù)

//主程序入口--main方法

public

static

void

main(String[]

args)

{

//創(chuàng)建BufferedReader對(duì)象,InputStream輸入流

BufferedReader

bf

=

new

BufferedReader(new

InputStreamReader(System.in));

System.out.println("請(qǐng)輸入盤(pán)子的個(gè)數(shù):");

try

{

int

sl

=

Integer.parseInt(bf.readLine().toString());//接收總盤(pán)子個(gè)數(shù)

toMove(sl,"A","B","C");//調(diào)用移動(dòng)方法

A--C

}

catch

(NumberFormatException

e)

{捕獲NumberFormatException異常

//

TODO

Auto-generated

catch

block

e.printStackTrace();//打印異常

}

catch

(IOException

e)

{//捕獲IOException異常

//

TODO

Auto-generated

catch

block

e.printStackTrace();//打印異常

}

System.out.println("總共移動(dòng)了:"+m+"

次數(shù)");//打印移動(dòng)次數(shù)

}

//移動(dòng)方法

private

static

void

toMove(int

sl,

String

one,

String

two,String

three)

{

if(sl==1){//如果只有一個(gè)盤(pán)子,則直接移動(dòng)到C柱

System.out.println("盤(pán)子"+sl+"

"+one+"----"+three);

}else{//如果總盤(pán)數(shù)大于1,則遞歸調(diào)用移動(dòng)方法

//把所有的數(shù)量為sl-1的盤(pán)子全部從A移到到B(C作為一個(gè)過(guò)渡),好提供一個(gè)最下面的位置給最大盤(pán)子到C;

toMove(sl-1,one,three,two);

System.out.println("盤(pán)子"+sl+"

"+one+"----"+three);

//把所有的剩余的盤(pán)子從B移動(dòng)到C(A作為一個(gè)過(guò)渡)

toMove(sl-1,two,one,three);

}

m++;

}

}

求java版漢諾塔的演示程序

源代碼:

/**

*本程序完成的功能是利用漢遞規(guī)算法實(shí)現(xiàn)漢諾塔的動(dòng)態(tài)演示程序

*/

import javax.swing.*;

import java.awt.geom.*;

import java.awt.event.*;

import java.awt.*;

public class Hanio extends JApplet implements ActionListener, Runnable

{

/**

*diskNum是盤(pán)子的數(shù)量

*/

private int diskNum ;

/**

*各個(gè)組件的句柄

*/

private JButton begin, stop;

private JLabel lDiskNum;

private JTextField text;

JPanel pane;

/**

*定義一個(gè)線(xiàn)程句柄

*/

private Thread animate;

/**

*定義a,b,c三個(gè)柱子上是否有盤(pán)子,有哪些盤(pán)子

*/

private int adisk[];

private int bdisk[];

private int cdisk[];

public void init()

{

Container content = getContentPane();

content.setLayout(new BorderLayout());

lDiskNum = new JLabel(盤(pán)子的數(shù)目);

text = new JTextField(8);

begin = new JButton(開(kāi)始);

begin.addActionListener(this);

stop = new JButton(停止);

stop.addActionListener(this);

pane = new JPanel();

pane.setLayout(new FlowLayout());

pane.add(lDiskNum);

pane.add(text);

pane.add(begin);

pane.add(stop);

content.add(pane, BorderLayout.SOUTH);

}

public void paint(Graphics g)

{

Graphics2D g2D = (Graphics2D)g;

Ellipse2D.Double ellipse;

g2D.setPaint(getBackground());

if(adisk != null)

{

/**

*消除以前畫(huà)的盤(pán)子

*/

for(int j=adisk.length, i=0; --j=0; i++ )

{

ellipse = new Ellipse2D.Double(20+i*5, 180-i*10, 180-i*10, 20);

g2D.fill(ellipse);

ellipse = new Ellipse2D.Double(220+i*5, 180-i*10, 180-i*10, 20);

g2D.fill(ellipse);

ellipse = new Ellipse2D.Double(420+i*5, 180-i*10, 180-i*10, 20);

g2D.fill(ellipse);

}

drawEllipse(g, 20, adisk);//畫(huà)A組盤(pán)子

drawEllipse(g, 220, bdisk);//畫(huà)B組盤(pán)子

drawEllipse(g, 420, cdisk);//畫(huà)C組盤(pán)子

}

pane.repaint();?

}

public void update(Graphics g)

{

paint(g);

}

/**畫(huà)出橢圓代表盤(pán)子,g是圖形環(huán)境,x是最下面的盤(pán)子的橫坐標(biāo),

*arr是柱子數(shù)組

*/

public void drawEllipse(Graphics g,int x,int arr[])

{

Graphics2D g2D = (Graphics2D)g;

Ellipse2D.Double ellipse;

g2D.setPaint(Color.gray);

g2D.draw(new Line2D.Double(x+90, 10, x+90, 180));

for(int j=arr.length, i=0; --j=0; i++ )

if(arr[j] != 0)

{

if(i%2 == 0)

g2D.setPaint(Color.blue);

else

g2D.setPaint(Color.red);

ellipse = new Ellipse2D.Double(x+i*5, 180-i*10, 180-i*10, 20);

g2D.fill(ellipse);

}

}

public void actionPerformed(ActionEvent e)

{

String command = e.getActionCommand();

if(command.equals(開(kāi)始))

{

/**

*進(jìn)行初始化,開(kāi)始的時(shí)候只有a柱子上有盤(pán)子,其他柱子都沒(méi)有

*/

diskNum = Integer.parseInt(text.getText());

adisk = new int[diskNum];

for(int i=0; iadisk.length; i++)

adisk[i] = 1;

bdisk = new int[diskNum];

for(int k=0; kbdisk.length; k++)

bdisk[k] = 0;

cdisk = new int[diskNum];

for(int i=0; icdisk.length; i++)

cdisk[i] = 0;

repaint();

if(animate == null || !animate.isAlive())//創(chuàng)建一個(gè)線(xiàn)程

{

animate = new Thread(this);

animate.start();

}

}

if(command.equals(停止))

{

for(int k=0; kbdisk.length; k++)

bdisk[k] = 0;

for(int i=0; icdisk.length; i++)

cdisk[i] = 0;

repaint();

text.setText();

animate = null;

}

}

/**

*線(xiàn)程方法,在此調(diào)用漢諾塔執(zhí)行移動(dòng)盤(pán)子操作

*/

public void run()

{

hanio(diskNum, 'A', 'B', 'C');

repaint();

}

/**

*漢諾塔遞規(guī)調(diào)用程序,n是盤(pán)子的數(shù)量,A,B,C分別代表三個(gè)柱子

*/

public void hanio(int n, char A, char B, char C)

{

if(n 1)

{

hanio(n-1, A, C, B);

pause();//停頓幾秒在執(zhí)行

switch(A)

{

case 'A':adisk[n-1] = 0;break;

case 'B':bdisk[n-1] = 0;break;

case 'C':cdisk[n-1] = 0;break;

default:break;

}

switch(C)

{

case 'A':adisk[n-1] = 1;break;

case 'B':bdisk[n-1] = 1;break;

case 'C':cdisk[n-1] = 1;break;

default:break;

}

repaint();

hanio(n-1, B, A, C);

}

pause();

switch(A)

{

case 'A':adisk[n-1] = 0;break;

case 'B':bdisk[n-1] = 0;break;

case 'C':cdisk[n-1] = 0;break;

default:break;

}

switch(C)

{

case 'A':adisk[n-1] = 1;break;

case 'B':bdisk[n-1] = 1;break;

case 'C':cdisk[n-1] = 1;break;

default:break;

}

repaint();

}

/**

*每隔半妙鐘移動(dòng)一個(gè)盤(pán)子

*/

public void pause()

{

try{

Thread.sleep(500);//可以修改此值加快盤(pán)子移動(dòng)的速度

}catch(InterruptedException e){}

}

}

標(biāo)題名稱(chēng):java漢羅塔代碼 python漢羅塔代碼
分享URL:http://muchs.cn/article44/docdshe.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供用戶(hù)體驗(yàn)、網(wǎng)站制作、網(wǎng)站策劃、營(yíng)銷(xiāo)型網(wǎng)站建設(shè)、建站公司、手機(jī)網(wǎng)站建設(shè)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶(hù)投稿、用戶(hù)轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話(huà):028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

營(yíng)銷(xiāo)型網(wǎng)站建設(shè)