三階漢諾塔java源代碼,java編寫漢諾塔代碼

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

定義了服務(wù)器線程類,服務(wù)器運行在一個單獨的線程中。

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

客戶端運行在主線程中。

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

下面是源代碼,輸入的盤子數(shù)不要太大,20以內(nèi),否則會步數(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();//啟動服務(wù)器

/*開始創(chuàng)建客戶端*/

Socket?socket?=?null;//客戶端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("請輸入盤子數(shù)(3-10),數(shù)字太大,運算時間就會太長可能會卡死。");

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("客戶端socket關(guān)閉");

}?catch?(IOException?e)?{

e.printStackTrace();

}

}

}

}

}

class?HanoiServer?extends?Thread?{//服務(wù)器線程類

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();

}

}

}

}

求數(shù)據(jù)結(jié)構(gòu)形式的漢諾塔源代碼

●漢諾塔算法的遞歸實現(xiàn)C++源代碼

#include fstream

#include iostream

using namespace std;

ofstream fout("out.txt");

void Move(int n,char x,char y)

{

fout"把"n"號從"x"挪動到"yendl;

}

void Hannoi(int n,char a,char b,char c)

{

if(n==1)

Move(1,a,c);

else

{

Hannoi(n-1,a,c,b);

Move(n,a,c);

Hannoi(n-1,b,a,c);

}

}

int main()

{

fout"以下是7層漢諾塔的解法:"endl;

Hannoi(7,'a','b','c');

fout.close();

cout"輸出完畢!"endl;

return 0;

}●漢諾塔算法的遞歸實現(xiàn)C源代碼:

#includestdio.h

void hanoi(int n,char A,char B,char C)

{

if(n==1)

{

printf("Move disk %d from %c to %c\n",n,A,C);

}

else

{

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

printf("Move disk %d from %c to %c\n",n,A,C);

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

}

}

main()

{

int n;

printf("請輸入數(shù)字n以解決n階漢諾塔問題:\n");

scanf("%d",n);

hanoi(n,'A','B','C');

}

●漢諾塔算法的非遞歸實現(xiàn)C++源代碼

#include iostream

using namespace std;

//圓盤的個數(shù)最多為64

const int MAX = 64;

//用來表示每根柱子的信息

struct st{

int s[MAX]; //柱子上的圓盤存儲情況

int top; //棧頂,用來最上面的圓盤

char name; //柱子的名字,可以是A,B,C中的一個

int Top()//取棧頂元素

{

return s[top];

}

int Pop()//出棧

{

return s[top--];

}

void Push(int x)//入棧

{

s[++top] = x;

}

} ;

long Pow(int x, int y); //計算x^y

void Creat(st ta[], int n); //給結(jié)構(gòu)數(shù)組設(shè)置初值

void Hannuota(st ta[], long max); //移動漢諾塔的主要函數(shù)

int main(void)

{

int n;

cin n; //輸入圓盤的個數(shù)

st ta[3]; //三根柱子的信息用結(jié)構(gòu)數(shù)組存儲

Creat(ta, n); //給結(jié)構(gòu)數(shù)組設(shè)置初值

long max = Pow(2, n) - 1;//動的次數(shù)應(yīng)等于2^n - 1

Hannuota(ta, max);//移動漢諾塔的主要函數(shù)

system("pause");

return 0;

}

void Creat(st ta[], int n)

{

ta[0].name = 'A';

ta[0].top = n-1;

//把所有的圓盤按從大到小的順序放在柱子A上

for (int i=0; in; i++)

ta[0].s[i] = n - i;

//柱子B,C上開始沒有沒有圓盤

ta[1].top = ta[2].top = 0;

for (int i=0; in; i++)

ta[1].s[i] = ta[2].s[i] = 0;

//若n為偶數(shù),按順時針方向依次擺放 A B C

if (n%2 == 0)

{

ta[1].name = 'B';

ta[2].name = 'C';

}

else //若n為奇數(shù),按順時針方向依次擺放 A C B

{

ta[1].name = 'C';

ta[2].name = 'B';

}

}

long Pow(int x, int y)

{

long sum = 1;

for (int i=0; iy; i++)

sum *= x;

return sum;

}

void Hannuota(st ta[], long max)

{

int k = 0; //累計移動的次數(shù)

int i = 0;

int ch;

while (k max)

{

//按順時針方向把圓盤1從現(xiàn)在的柱子移動到下一根柱子

ch = ta[i%3].Pop();

ta[(i+1)%3].Push(ch);

cout ++k ": "

"Move disk " ch " from " ta[i%3].name

" to " ta[(i+1)%3].name endl;

i++;

//把另外兩根柱子上可以移動的圓盤移動到新的柱子上

if (k max)

{ //把非空柱子上的圓盤移動到空柱子上,當(dāng)兩根柱子都為空時,移動較小的圓盤

if (ta[(i+1)%3].Top() == 0 ||

ta[(i-1)%3].Top() 0

ta[(i+1)%3].Top() ta[(i-1)%3].Top())

{

ch = ta[(i-1)%3].Pop();

ta[(i+1)%3].Push(ch);

cout ++k ": " "Move disk "

ch " from " ta[(i-1)%3].name

" to " ta[(i+1)%3].name endl;

}

else

{

ch = ta[(i+1)%3].Pop();

ta[(i-1)%3].Push(ch);

cout ++k ": " "Move disk "

ch " from " ta[(i+1)%3].name

" to " ta[(i-1)%3].name endl;

}

}

}

}

JAVA漢諾塔

import java.awt.*;

public class TowerPoint //公共類TowerPoint

{

int x,y; //定義2個int類型的變量

boolean 有盤子; //定義一個boolean類型的變量

Disk 盤子=null; //初始化一個對象"盤子"并賦值為空

HannoiTower con=null; //初始化一個HannoiTower類的對象"con"并賦值為空

public TowerPoint(int x,int y,boolean boo) //構(gòu)造函數(shù),有3個參數(shù),x,y,boo

{

this.x=x; //將參數(shù)賦給當(dāng)前x

this.y=y; //將參數(shù)賦給當(dāng)前y

有盤子=boo; //將boo賦給"有盤子"

}

public boolean 是否有盤子() //定義一個返回boolean類型的方法"是否有盤子"

{

return 有盤子; //返回boolean類型的"有盤子"

}

public void set有盤子(boolean boo) //set方法,并且參數(shù)為boolean

{

有盤子=boo; //將boo賦給有盤子

}

public int getX() //取得x方法

{

return x; //返回x

}

public int getY()//取得y方法

{

return y; //返回y

}

public void 放置盤子(Disk 盤子,HannoiTower con) //定義一個有2個參數(shù)的"放置盤子"方法。參數(shù)是Disk類和HannoiTower類

{

this.con=con; //當(dāng)前con等于參數(shù)con

con.setLayout(null); //調(diào)用on對象的方法setLayout,并設(shè)置為空

this.盤子=盤子; //當(dāng)前盤子等于參數(shù)盤子

con.add(盤子); //con對象的add方法,加入"盤子"對象

int w=盤子.getBounds().width; //定義并給一個int類型的w變量一個值,值為"盤子.getBounds().width"

int h=盤子.getBounds().height; //定義并給一個int類型的h變量一個值,值為"盤子.getBounds().height"

盤子.setBounds(x-w/2,y-h/2,w,h);//調(diào)用"盤子"對象的setBounds方法,并把傳遞值

有盤子=true;//boolean類型的對象"有盤子"等于true

con.validate(); //調(diào)用con對象的validate方法

}

public Disk 獲取盤子() //定義"獲取盤子"方法,方法返回Disk對象

{

return 盤子; //返回盤子

}

}

-----------------------另外說一下,樓主太摳門了!!!!!!!!只給5分-----------------------

求java版漢諾塔的演示程序

源代碼:

/**

*本程序完成的功能是利用漢遞規(guī)算法實現(xiàn)漢諾塔的動態(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是盤子的數(shù)量

*/

private int diskNum ;

/**

*各個組件的句柄

*/

private JButton begin, stop;

private JLabel lDiskNum;

private JTextField text;

JPanel pane;

/**

*定義一個線程句柄

*/

private Thread animate;

/**

*定義a,b,c三個柱子上是否有盤子,有哪些盤子

*/

private int adisk[];

private int bdisk[];

private int cdisk[];

public void init()

{

Container content = getContentPane();

content.setLayout(new BorderLayout());

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

text = new JTextField(8);

begin = new JButton(開始);

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)

{

/**

*消除以前畫的盤子

*/

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);//畫A組盤子

drawEllipse(g, 220, bdisk);//畫B組盤子

drawEllipse(g, 420, cdisk);//畫C組盤子

}

pane.repaint();?

}

public void update(Graphics g)

{

paint(g);

}

/**畫出橢圓代表盤子,g是圖形環(huán)境,x是最下面的盤子的橫坐標(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(開始))

{

/**

*進(jìn)行初始化,開始的時候只有a柱子上有盤子,其他柱子都沒有

*/

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)建一個線程

{

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;

}

}

/**

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

*/

public void run()

{

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

repaint();

}

/**

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

*/

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();

}

/**

*每隔半妙鐘移動一個盤子

*/

public void pause()

{

try{

Thread.sleep(500);//可以修改此值加快盤子移動的速度

}catch(InterruptedException e){}

}

}

求助:求JAVA環(huán)境下的四柱漢諾塔問題源代碼

public class Tower {

/**

* 顯示移動位置

*

* @param x

* @param Source

* @param Target

*/

void moveIt(int x, int Source, int Target) {

System.out.println("移動 [" + x + "] 從 " + Source + " 到 "

+ Target);

}

/**

*

* @param n

* 盤子數(shù)量

* @param First

* 第一根柱子

* @param Second

* 第二根柱子

* @param Third

* 第三根柱子

* @param Fourth

* 第四根柱子

* @return

*/

int MoveHanoi(int n, int First, int Second, int Third, int Fourth) {

if (n 1)

return 0; // 如果沒有盤子就返回

if (n == 1) // 如果只有一個盤子

{

moveIt(n, First, Fourth); // 就直接從源柱子移到目標(biāo)柱子上

return 0;

}

if (n == 2) // 如果有兩個盤子

{

moveIt(n - 1, First, Second); // 把上面的那片移到一個過渡柱上

moveIt(n, First, Fourth); // 把下面的那片移到目標(biāo)柱上

moveIt(n - 1, Second, Fourth); // 再把第 1 片從過渡柱移到目標(biāo)柱上

return 0;

}

if (n == 3) // 如果有 3 片盤子

{

moveIt(n - 2, First, Second); // 把最小的盤子移到一個過渡柱上

moveIt(n - 1, First, Third); // 把中間盤子移到另一過渡柱上

moveIt(n, First, Fourth); // 把最大的盤子移到目標(biāo)柱上

moveIt(n - 1, Third, Fourth); // 把中間盤子移到目標(biāo)柱上

moveIt(n - 2, Second, Fourth); // 把最小的盤子移到目標(biāo)柱上

return 0;

}

// 遞歸地把上面 n-2 盤子移到一個過渡柱上

// 留下最大的兩個盤子

MoveHanoi(n - 2, First, Third, Fourth, Second);

moveIt(n - 1, First, Third); // 把倒數(shù)第 2 個盤子移到另一個過渡柱上

moveIt(n, First, Fourth); // 把最底下的盤子移到目標(biāo)柱上

moveIt(n - 1, Third, Fourth); // 把倒數(shù)第 2 個盤子移到目標(biāo)柱上

// 遞歸地把 n-2 個盤子從過渡柱上移到目標(biāo)柱上

MoveHanoi(n - 2, Second, First, Third, Fourth);

return 0;

}

public static void main(String[] args) {

//4柱漢諾塔

new Tower().MoveHanoi(4, 1, 2, 3, 4);

}

}

求一個漢諾塔的JAVA代碼

public?class?Hannoi?{

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?+?"移動盤子?"?+?level?+?"?號到"?+?to);

}?else?{

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

System.out.println("從"?+?from?+?"移動盤子?"?+?level?+?"?號到"?+?to);

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

}

}

}

分享題目:三階漢諾塔java源代碼,java編寫漢諾塔代碼
瀏覽地址:http://m.kartarina.com/article0/dseecoo.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供Google服務(wù)器托管企業(yè)建站網(wǎng)站維護(hù)網(wǎng)站策劃網(wǎng)站內(nèi)鏈

廣告

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

綿陽服務(wù)器托管
主站蜘蛛池模板: 亚洲国产精品无码一线岛国| 国产亚洲?V无码?V男人的天堂 | 亚洲视频无码高清在线| 中文字幕无码乱人伦| 亚洲AV无码一区二区三区性色| 亚洲Aⅴ无码一区二区二三区软件| 亚洲国产无套无码av电影| 免费无码又爽又高潮视频| 久久精品九九热无码免贵| 久久久久久亚洲精品无码| 国产AV无码专区亚汌A√| 人妻无码久久精品人妻| 国产AV巨作情欲放纵无码| 国产在线无码精品无码| 国产成人无码AV麻豆| 国产做无码视频在线观看浪潮 | 亚洲中文字幕无码永久在线| 亚洲中文字幕久久精品无码A| 亚洲精品无码久久千人斩| 69成人免费视频无码专区| 精品国精品无码自拍自在线| 亚洲AV永久无码精品| 国产AV无码专区亚洲AV麻豆丫 | 亚洲AV无码精品国产成人| 无码中文字幕日韩专区视频| 国产AⅤ无码专区亚洲AV| 国产精品免费看久久久无码| 国产精品久久无码一区二区三区网| 久久久久亚洲av无码专区喷水 | 无码毛片视频一区二区本码| 国产成人A人亚洲精品无码| 亚洲午夜无码AV毛片久久| 精品少妇人妻AV无码专区不卡| 久久久久久亚洲Av无码精品专口 | 久久久久无码国产精品不卡| 韩国免费a级作爱片无码| 国产在线精品无码二区二区 | 亚洲AV无码成人精品区天堂| AV无码精品一区二区三区宅噜噜 | 高清无码中文字幕在线观看视频| 精品无码国产污污污免费网站|