PDA

View Full Version : [Algorithme] Tree general trong Java !



TLHP
14-04-2006, 21:20
Chào các anh chị trong diễn đàn , em mới học Java và đang học đến phần cây , có liên quan đến HashSet , nhưng em vânc chưa hiểu rõ về khái niệm này lắm. Yêu cầu của bài là xây dựng một Class nhằm miêu tả về cây tổng quát ( Tree General ) : là một cây mà số con trong mỗi nhánh là tuỳ ý .

Về ý tưởng là chúng ta phải xây dựng 2 lớp Foret và Tree .

class Tree {
private Object goc; // Goc cua cay
private Foret caycon; // Cay con
public int hashCode () { return goc.hashCode () ; }
public boolean equals ( Object o ) { return o instanceof Tree && goc.equals (((Tree) o ).goc);}

............
...............

Trong đó Foret là một tập hợp chứa các Tree bên trong.

Do chưa hiểu rõ lắm về HashSet nên em vẫn chưa có giải pháp cho class Foret . Ví dụ :

class Foret {
Set s = new HashSet();
..........

Nhưng làm thế nào để thiết lập kiểu của HashSet này là Tree .

Một cấu hỏi nữa là , chúng ta có thể duyệt cây này bằng cách nào. Em mới chỉ thực hiện đệ quy trên Binary Tree thôi , còn cái này thi đang nghiên cứu .

Mong các bác giúp em sớm !

ctungq
08-05-2006, 20:08
HashSet là dạng cây thường dùng để chứa dữ liệu không trùng giá trị. Ngược lại thì dùng treeSet, TreeSet lưu kết quả theo thứ tự.

Bạn có thể tham khảo tài liệu API cua Java: http://java.sun.com/j2se/1.4.2/docs/api/java/util/HashSet.html

Mình search trên google có tìm thấy 1 ví dụ:
http://www.allapplabs.com/java/hashset_treeset_classes.htm

Example
import java.util.*;

public class HashTreeSetEx{
public static void main (String args[]){

Set set = new HashSet(){
set.add("one");
set.add("two");
set.add("three");
set.add("four");
set.add("one");
System.out.println(set);
Set sortedSet= new TreeSet(set);
System.out.println(SortedSet);
}
}

Ví dụ này cho ra kết quả:
[one, two, three, four] -> HashSet
[four, one, three, two] -> TreeSet (theo thứ tự A,B,C,D...)

Nếu tìm kiếm trong HashSet thì dùng: contains(Object o).

Bạn có thể tìm được nhiều hàm hơn trong API cua java.sun.com.

binhk12tin
02-03-2010, 10:43
minh muốn hỏi về cách khởi tạo cây trong java thi phải lam sao ha các bạn?

vuacuagai
03-03-2010, 06:25
Cây? Trong Java đã có sẵn mấy cấu trúc dữ liệu được thiết kế chạy ngon lành gòi: List, Set, Map.
Nếu muốn tự tạo cây để học thuật giải, thì có thể làm vẫn được, chủ yếu thuật giải thôi mà.

trunghieuwelcome
06-12-2010, 10:48
Emachines D732-352G32Mn (018)

[=========> Bổ sung bài viết <=========]

• Vẽ một quả bóng rơi từ trên xuống dưới trên màn hình,
• Vẽ một hình chữ nhật phía dưới màn hình và di chuyển nó sang trái và phải bằng xử lý các phím mũi tên,

dinhanh82
10-03-2011, 22:57
import javax.microedition.midlet.*;

import javax.microedition.lcdui.*;

import javax.microedition.lcdui.game.*;


class DiChuyenhcn extends GameCanvas implements CommandListener,Runnable {

Command c1 = new Command("Thoat", Command.EXIT, 1);

int dem=0, x1=100, y1=0,dy=20,dx=20, dx1=20, dy1=20, x=100,y=getHeight() ;

Graphics g = getGraphics(); //B1 của quá trình vẽ


DiChuyenhcn(){

super(false);

hamvehcn();

new Thread(this).start();

addCommand(c1); //thêm lệnh vào màn hình

setCommandListener(this); //đăng ký xử lý lệnh

}


void hamvehcn(){

g.setColor(0, 0, 255);

g.drawRect(x,y-32,45,15);

flushGraphics();

}

void hamxoahcn(){

g.setColor(255, 255, 255);

g.drawRect(x,y-32,45,15);

flushGraphics();

}

public void keyPressed(int k){ //hàm nhấn phím

hamxoahcn();

int a = getGameAction(k);

if(a==LEFT && x>0) x -= dx;

if(a==RIGHT && x<getWidth()-45) x += dx;

hamvehcn();
if(a==FIRE) vebong(10,10);

}



public void keyRepeated(int k){ keyPressed(k);
}

public void vebong(int x1, int y1)

{

g.setColor(255, 0, 0);

g.fillArc(x1, y1, 20, 20, 0, 360);

flushGraphics();

}


public void xoabong(int x1, int y1 )

{

g.setColor(255, 255, 255);

g.fillArc(x1, y1, 20, 20, 0, 360);

flushGraphics();

}




public void commandAction(Command c,Displayable d){ //hàm xử lý

if(c==c1){


g.setColor(0, 0, 255);

g.drawString("Ket qua"+dem, 10, 10, g.LEFT+g.TOP);

flushGraphics();

}

}

public void bongroi(int x1, int y1){

while(true)
{


vebong(x1,y1);

try{ Thread.sleep(70); }catch(Exception e){}

xoabong(x1,y1);
// x1+=dx1;
if(x1<0||x1>getWidth()-10) dx1=-dx1;

y1+=dy1; if((x<=x1 && x1<=x+45)&&(y1>=getHeight()-42)|| (y1<=0))dy1=-dy1;

if((x<=x1 && x1<=x+45)&&(y1>=getHeight()-42)) dem=dem+1;


}

}


public void run(){

bongroi();
}

}

public class bai1 extends MIDlet{

public void startApp()
{

Display.getDisplay(this).setCurrent(new DiChuyenhcn());

}

public void pauseApp(){}

public void destroyApp(boolean t){}

}