Register Register Member Login Member Login Member Login Forgot Password ??
PHP , ASP , ASP.NET, VB.NET, C#, Java , jQuery , Android , iOS , Windows Phone
 

Registered : 109,037

HOME > Java Programming > Java Forum > ตอนนี้ทำ Backtracking เรื่องปัญหา Eight Queens เสร็จแล้ว แต่อยากใส่รูปลงในช่องดำ แทนที่เป็นช่องดำๆ ธรรมดา ต้องทำอย่างไรครับ



 

ตอนนี้ทำ Backtracking เรื่องปัญหา Eight Queens เสร็จแล้ว แต่อยากใส่รูปลงในช่องดำ แทนที่เป็นช่องดำๆ ธรรมดา ต้องทำอย่างไรครับ

 



Topic : 112643



โพสกระทู้ ( 131 )
บทความ ( 12 )



สถานะออฟไลน์




ตอนนี้ทำ Backtracking เรื่องปัญหา Eight Queens เสร็จแล้ว แต่อยากใส่รูปลงในช่องดำ แทนที่เป็นช่องดำๆ ธรรมดา ต้องทำอย่างไรครับ

โดยมี Code ที่เสร็จแล้ว ดังนี้

1. QueensApplet.java

Code (Java)
import java.applet.Applet;
import java.awt.*;
import java.awt.event.*;

public class QueensApplet extends Applet implements ActionListener {
	Button 	solve = new Button("Solve");
	Button 	clear = new Button("Clear");
	Board	b = new Board();

	public void init() {
		setLayout(new BorderLayout());
		add("Center", b);

		Panel bPanel = new Panel();
		add("South", bPanel);
		bPanel.setLayout(new GridLayout(1,5));
	
		bPanel.add(new Label(" "));
		bPanel.add(clear);
		bPanel.add(new Label(" "));
		bPanel.add(solve);
		bPanel.add(new Label(" "));

		
		clear.addActionListener(this);
		solve.addActionListener(this);
	}
	
	public void actionPerformed(ActionEvent e) {
        if (e.getSource() == clear) { 
			b.initBoard();
			b.paint(b.getGraphics());
		} else if (e.getSource() == solve) { 
			b.initBoard();
			b.paint(b.getGraphics());
			b.solve(0);
		}
	}
}


2. Board.java

Code (Java)
import java.awt.*;
import java.awt.event.*;

public class Board extends Canvas implements MouseListener {
	int[][] grid = new int[8][8];
	Graphics gr = this.getGraphics();
	int gWidth,gHeight;
		
	public Board() {
		addMouseListener(this);
		initBoard();
	}
	
	public void initBoard() {
		for (int i=0;i<8;i++) 
			for (int j=0;j<8;j++)
				grid[i][j] = 0;
	}
	
	/**
	 * Paint the board 
	 */
	public void paint(Graphics g) {
		gr = g;
		gWidth = getBounds().width/8;
		gHeight = getBounds().height/8;
		for (int i=0;i<8;i++) 
			for (int j=0;j<8;j++) 
				drawCell(i,j);
	}

	/**
	 * Draw a specific cell on the board.
	 */
	private void drawCell(int x, int y) {
		int dark = 0;
		gr.setColor(Color.black);
		gr.drawRect(x*gWidth, y*gHeight, gWidth, gHeight);
		if ((x+y)%2 == 0) 	
			dark = 20;
		switch (grid[x][y]) {
			case 0: gr.setColor(new Color(230+dark,230+dark,230+dark)); break;
			case 1: gr.setColor(new Color(160+dark,110+dark,110+dark)); break;
			case 2: gr.setColor(new Color(0,0,0)); break;
		}
		gr.fillRect(x*gWidth+1, y*gHeight+1, gWidth-1, gHeight-1);
	}

	public void mouseExited(MouseEvent e) {}
	public void mouseReleased(MouseEvent e) {}
	public void mouseClicked(MouseEvent e) {}
	public void mouseEntered(MouseEvent e) {}

	/**
	 * Handle a mouse click.
	 */
	public void mousePressed(MouseEvent e) {
		int x,y;
		
		x = e.getX()/gWidth;
		y = e.getY()/gHeight;
		if (legal(x,y)) {
			if (grid[x][y] == 0) 
				addQueen(x,y,true);
			else if (grid[x][y] == 2) 
				addQueen(x,y,false);
		}
	}
	
	/**
	 * Adds (or removes) a queen to the given coordinates.
	 * If add is true, it adds a queen. If it is false, it removes a queen.
	 */
	private void addQueen(int x, int y, boolean add) {
		int i;
		gr = this.getGraphics();
		if (add)
			grid[x][y] = 2;
		else
			grid[x][y] = 0;
		for (i=0;i<8;i++) {
			if (i!=y) changeCell(x,i,add);
			if (i!=x) changeCell(i,y,add);
		}
		for (i=1; legal(x+i,y+i); i++)
			changeCell(x+i,y+i,add);
		for (i=1; legal(x+i,y-i); i++)
			changeCell(x+i,y-i,add);
		for (i=1; legal(x-i,y+i); i++)
			changeCell(x-i,y+i,add);
		for (i=1; legal(x-i,y-i); i++)
			changeCell(x-i,y-i,add);
		
		drawCell(x,y);
		if (!add)
			for (i=0;i<8;i++)
				for (int j=0;j<8;j++)
					if (grid[i][j] == 2)
						addQueen(i,j,true);
	}
	
	/**
	 * Add or remove a queen to the given cell
	 */
	private void changeCell(int x, int y, boolean add) {
		if (add && grid[x][y] == 0)
			grid[x][y] = 1;
		else if (!add && grid[x][y] == 1)
			grid[x][y] = 0;
		drawCell(x,y);
	}
	
	/**
	 * Returns true if the coordinates are a legal board position
	 */
	private boolean legal(int x, int y) {
		return (x >= 0 && x < 8 && y >= 0 && y < 8);
	}

	/**
	 * Solve the 8-queens puzzle with a very simple depth-first search.
	 */
	public boolean solve(int y) {
		int 	i,j;
		boolean r = false;
		
		for (i=0;i<8;i++) { 
			// for each row, try placing a queen
			if (grid[i][y] == 0) {
				addQueen(i,y,true);
				if (y == 7) {
					return true; // we have placed all queens successfully
				} else {
					if (solve(y+1)) {
						return true; // we solved it, return
					} else {
						addQueen(i,y,false); // remove the queen
					}
				}
			}
		}
		// unable to solve down this branch -- retreat!
		return false;
	}
	

}


ผลที่ออกมา คือ ผลที่ออกมา

โดยผมอยากได้ Eights Queen ที่ช่องสีดำๆ เป็นรูปตัว Queen แทน ดังนี้ครับ

อยากได้รูป



Tag : Java, JAVA, Windows, Linux, Mac







Move To Hilight (Stock) 
Send To Friend.Bookmark.
Date : 2014-11-18 14:30:52 By : doanga2007 View : 1209 Reply : 2
 

 

No. 1



โพสกระทู้ ( 131 )
บทความ ( 12 )



สถานะออฟไลน์


ตอนนี้แก้ปัญหาได้แล้วครับ ขอปิดกระทู้ครับ






แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2014-12-09 22:12:15 By : doanga2007
 


 

No. 2



โพสกระทู้ ( 74,058 )
บทความ ( 838 )

สมาชิกที่ใส่เสื้อไทยครีเอท

สถานะออฟไลน์
Twitter Facebook


แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2014-12-10 09:56:43 By : mr.win
 

   

ค้นหาข้อมูล


   
 

แสดงความคิดเห็น
Re : ตอนนี้ทำ Backtracking เรื่องปัญหา Eight Queens เสร็จแล้ว แต่อยากใส่รูปลงในช่องดำ แทนที่เป็นช่องดำๆ ธรรมดา ต้องทำอย่างไรครับ
 
 
รายละเอียด
 
ตัวหนา ตัวเอียง ตัวขีดเส้นใต้ ตัวมีขีดกลาง| ตัวเรืองแสง ตัวมีเงา ตัวอักษรวิ่ง| จัดย่อหน้าอิสระ จัดย่อหน้าชิดซ้าย จัดย่อหน้ากึ่งกลาง จัดย่อหน้าชิดขวา| เส้นขวาง| ขนาดตัวอักษร แบบตัวอักษร
ใส่แฟลช ใส่รูป ใส่ไฮเปอร์ลิ้งค์ ใส่อีเมล์ ใส่ลิ้งค์ FTP| ใส่แถวของตาราง ใส่คอลัมน์ตาราง| ตัวยก ตัวห้อย ตัวพิมพ์ดีด| ใส่โค้ด ใส่การอ้างถึงคำพูด| ใส่ลีสต์
smiley for :lol: smiley for :ken: smiley for :D smiley for :) smiley for ;) smiley for :eek: smiley for :geek: smiley for :roll: smiley for :erm: smiley for :cool: smiley for :blank: smiley for :idea: smiley for :ehh: smiley for :aargh: smiley for :evil:
Insert PHP Code
Insert ASP Code
Insert VB.NET Code Insert C#.NET Code Insert JavaScript Code Insert C#.NET Code
Insert Java Code
Insert Android Code
Insert Objective-C Code
Insert XML Code
Insert SQL Code
Insert Code
เพื่อความเรียบร้อยของข้อความ ควรจัดรูปแบบให้พอดีกับขนาดของหน้าจอ เพื่อง่ายต่อการอ่านและสบายตา และตรวจสอบภาษาไทยให้ถูกต้อง

อัพโหลดแทรกรูปภาพ

Notice

เพื่อความปลอดภัยของเว็บบอร์ด ไม่อนุญาติให้แทรก แท็ก [img]....[/img] โดยการอัพโหลดไฟล์รูปจากที่อื่น เช่นเว็บไซต์ ฟรีอัพโหลดต่าง ๆ
อัพโหลดแทรกรูปภาพ ให้ใช้บริการอัพโหลดไฟล์ของไทยครีเอท และตัดรูปภาพให้พอดีกับสกรีน เพื่อความโหลดเร็วและไฟล์ไม่ถูกลบทิ้ง

   
  เพื่อความปลอดภัยและการตรวจสอบ กระทู้ที่แทรกไฟล์อัพโหลดไฟล์จากที่อื่น อาจจะถูกลบทิ้ง
 
โดย
อีเมล์
บวกค่าให้ถูก
<= ตัวเลขฮินดูอารบิก เช่น 123 (หรือล็อกอินเข้าระบบสมาชิกเพื่อไม่ต้องกรอก)







Exchange: นำเข้าสินค้าจากจีน, Taobao, เฟอร์นิเจอร์, ของพรีเมี่ยม, ร่ม, ปากกา, power bank, แฟลชไดร์ฟ, กระบอกน้ำ

Load balance : Server 01
ThaiCreate.Com Logo
© www.ThaiCreate.Com. 2003-2024 All Rights Reserved.
ไทยครีเอทบริการ จัดทำดูแลแก้ไข Web Application ทุกรูปแบบ (PHP, .Net Application, VB.Net, C#)
[Conditions Privacy Statement] ติดต่อโฆษณา 081-987-6107 อัตราราคา คลิกที่นี่