`

棋盘覆盖算法JAVA实现

    博客分类:
  • JAVA
阅读更多

下面是我写的一个关于棋盘覆盖问题的算法,用四种颜色来实现四个图形对其进行的覆盖:

import java.awt.Color;
import java.awt.Container;
import java.awt.Graphics;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JTextField;

public class BoardFrame extends JFrame {
	private int Fx = 100, Fy = 100;
	private int n = 0;
	private char size[][] = new char[100][100];
	private int i = 0;
	private JButton button;
	private int n1, n2, n3;
	private JTextField textfield1, textfield2;
	private JTextField text1, text2, text3, text4, text5;

	public BoardFrame() {
		super("ChessBoard");
		Container container = getContentPane();
		container.setLayout(null);
		textfield1 = new JTextField("Enter the Size:");
		textfield1.setEditable(false);
		textfield1.setBounds(0, 35, 100, 20);
		container.add(textfield1);
		text1 = new JTextField("输入特殊点坐标:");
		text1.setEditable(false);
		text1.setBounds(0, 10, 100, 20);
		container.add(text1);
		text2 = new JTextField("x0 (100~540):");
		text2.setEditable(false);
		text2.setBounds(120, 10, 100, 20);
		container.add(text2);
		text3 = new JTextField("200");
		text3.setBounds(230, 10, 40, 20);
		container.add(text3);
		text4 = new JTextField("y0 (100~540):");
		text4.setEditable(false);
		text4.setBounds(300, 10, 100, 20);
		container.add(text4);
		text5 = new JTextField("300");
		text5.setBounds(410, 10, 40, 20);
		container.add(text5);
		textfield2 = new JTextField("8");
		textfield2.setBounds(130, 35, 50, 20);
		container.add(textfield2);
		button = new JButton("确定");
		// button.setLayout(new GridLayout(1,2));
		button.setBounds(300, 35, 90, 20);
		button.addActionListener(new ActionListener() {

			public void actionPerformed(ActionEvent e) {
				n = Integer.parseInt(textfield2.getText());
				Fx = Integer.parseInt(text3.getText());
				Fy = Integer.parseInt(text5.getText());
				i++;
				n1 = 450 / n;
				n2 = ((Fx - 100) / n1) * n1 + 100;
				n3 = ((Fy - 100) / n1) * n1 + 100;
				ChessBoard(100, 100, n2, n3, n);
				repaint();
			}
		}

		);
		container.add(button);
		this.setSize(600, 600);
		this.setVisible(true);
		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
	}

	public void paint(Graphics g) {
		super.paint(g);
		g.setColor(Color.white);
		g.fillRect(this.getX(), this.getY(), 600, 600);
		if (i != 0) {
			int x = 100;
			int y = 100;
			g.setColor(Color.black);
			g.fillRect(n2, n3, n1, n1);
			// size[3][0]='b';
			// ChessBoard(100,100,100,100,8);
			for (int i = 0; i < n; i++)
				for (int j = 0; j < n; j++) {
					if (size[j] == 'r') {
						g.setColor(Color.red);
						g.fillRect(i * n1 + 100, j * n1 + 100, n1, n1);
					}
					if (size[j] == 'g') {
						g.setColor(Color.green);
						g.fillRect(i * n1 + 100, j * n1 + 100, n1, n1);
					}
					if (size[j] == 'l') {
						g.setColor(Color.blue);
						g.fillRect(i * n1 + 100, j * n1 + 100, n1, n1);
					}
					if (size[j] == 'y') {
						g.setColor(Color.yellow);
						g.fillRect(i * n1 + 100, j * n1 + 100, n1, n1);
					}
				}
			g.setColor(Color.black);
			g.fillRect(n2, n3, n1, n1);
			g.setColor(Color.BLACK);
			for (; y <= n * n1 + 100; y = y + n1) {
				g.drawLine(x, y, n * n1 + 100, y);
			}
			for (x = 100, y = 100; x <= n * n1 + 100; x = x + n1) {
				g.drawLine(x, y, x, n * n1 + 100);
			}
		}
	}

	void ChessBoard(int tr, int tc, int dr, int dc, int sizes) {
		int s = 0;
		if (sizes == 1)
			return;
		s = sizes / 2;
		if (dr < tr + s * n1 && dc < tc + s * n1) {
			size[s + (tr - 100) / n1 - 1][s + (tc - 100) / n1] = 'g';
			size[s + (tr - 100) / n1][s + (tc - 100) / n1 - 1] = 'g';
			size[s + (tr - 100) / n1][s + (tc - 100) / n1] = 'g';
			ChessBoard(tr, tc, dr, dc, s);
			ChessBoard(tr + s * n1, tc, tr + s * n1, tc + (s - 1) * n1, s);
			ChessBoard(tr, tc + s * n1, tr + (s - 1) * n1, tc + s * n1, s);
			ChessBoard(tr + s * n1, tc + s * n1, tr + s * n1, tc + n1 * s, s);
		}

		else {

			if (dr >= tr + s * n1 && dc < tc + s * n1) {
				size[s + (tr - 100) / n1 - 1][s + (tc - 100) / n1 - 1] = 'l';
				size[s + (tr - 100) / n1 - 1][s + (tc - 100) / n1] = 'l';
				size[s + (tr - 100) / n1][s + (tc - 100) / n1] = 'l';
				ChessBoard(tr, tc, tr + (s - 1) * n1, tc + (s - 1) * n1, s);
				ChessBoard(tr + s * n1, tc, dr, dc, s);
				ChessBoard(tr, tc + s * n1, tr + (s - 1) * n1, tc + s * n1, s);
				ChessBoard(tr + s * n1, tc + s * n1, tr + s * n1, tc + n1 * s,
						s);
			} else {
				if (dr < tr + s * n1 && dc >= tc + s * n1) {
					size[s + (tr - 100) / n1 - 1][s + (tc - 100) / n1 - 1] = 'r';
					size[s + (tr - 100) / n1][s + (tc - 100) / n1 - 1] = 'r';
					size[s + (tr - 100) / n1][s + (tc - 100) / n1] = 'r';
					ChessBoard(tr, tc, tr + (s - 1) * n1, tc + (s - 1) * n1, s);
					ChessBoard(tr + s * n1, tc, tr + s * n1, tc + (s - 1) * n1,
							s);
					ChessBoard(tr, tc + s * n1, dr, dc, s);
					ChessBoard(tr + s * n1, tc + s * n1, tr + s * n1, tc + n1
							* s, s);
				} else {
					if (dr >= tr + s * n1 && dc >= tc + s * n1) {
						size[s + (tr - 100) / n1 - 1][s + (tc - 100) / n1 - 1] = 'y';
						size[s + (tr - 100) / n1][s + (tc - 100) / n1 - 1] = 'y';
						size[s + (tr - 100) / n1 - 1][s + (tc - 100) / n1] = 'y';
						ChessBoard(tr, tc, tr + (s - 1) * n1,
								tc + (s - 1) * n1, s);
						ChessBoard(tr + s * n1, tc, tr + s * n1, tc + (s - 1)
								* n1, s);
						ChessBoard(tr, tc + s * n1, tr + (s - 1) * n1, tc + s
								* n1, s);
						ChessBoard(tr + s * n1, tc + s * n1, dr, dc, s);
					}
				}
			}
		}

	}

}

 

分享到:
评论

相关推荐

    Java基于分治算法实现的棋盘覆盖问题示例

    主要介绍了Java基于分治算法实现的棋盘覆盖问题,简单描述了棋盘覆盖问题,并结合具体实例形式分析了java基于分治算法实现棋盘覆盖问题的相关操作技巧,需要的朋友可以参考下

    棋盘覆盖算法代码

    棋盘覆盖方块版输出Java和棋盘覆盖数字版输出Java 问题描述 在一个2^k×2^k 个方格组成的棋盘中,恰有一个方格与其他方格不同,称该方格为一特殊方格,且称该棋盘为一特殊棋盘。在棋盘覆盖问题中,要用图示的4种...

    棋盘覆盖算法(Java)

    棋盘覆盖算法(Java) 算法分析与设计中的内容!!!

    分治法案例-残缺棋盘覆盖问题-JAVA实现

    使用JAVA解决残缺棋盘覆盖问题:一个n*n的棋盘上有一个缺陷点,该点不能被覆盖,剩下的格子全部用三盒板覆盖。应用的是分治法。

    棋盘覆盖 java版本

    java实现棋盘覆盖 算法分析里面的一道题目

    算法分析JAVA写的棋盘覆盖

    用JAVA写的棋盘覆盖,初学JAVA时写的,请多多包涵。

    棋盘覆盖java实现代码

    棋盘覆盖java实现代码..........超好的.....欢迎大家来下载.....

    棋盘覆盖Java源码

    算法系列(一):棋盘覆盖 博客地址:http://blog.csdn.net/qq_22145801/article/

    棋盘覆盖算法

    老师留的编程作业,写完后分享给大家,用java编写,实现不高于2*5的棋盘的覆盖算法,包括着色,自动演示,显示数字等功能

    算法分治 汉诺塔、棋盘覆盖 JAVA图形演示

    有详细注释哈、、没资源分了,就随便传了一个,拜托了。。

    棋盘覆盖Java代码

    算法分析中的棋盘覆盖Java代码,适于初学者学习

    JAVA实现棋盘覆盖问题

    算法分析的分治法解棋盘的JAVA源代码 可以有输入的 希望可以对大家有帮助

    java棋盘覆盖实现演示程序

    棋盘覆盖:用4种不同形态的L型骨牌覆盖给定的特殊棋盘上除特殊方格外的所有方格,且任何2个L型骨牌不得重叠覆盖。这是一个演示程序,电脑将自动覆盖所有除特殊方格外的方格。

    全排列和棋盘覆盖的java实现代码

    计算机算法设计与实现的实验一 本人觉得它是对递归与分治策略思想最好理解的例子!

    java写的棋盘覆盖程序

    java写的小程序,经典的棋盘覆盖算法,里面是关于该算法的详细描述,是一篇不错的论文哦,

    Java实现棋盘覆盖图形界面版

    算法作业,棋盘覆盖,采用图形界面显示覆盖结果

    java解决棋盘覆盖问题

    为了将这3个无特殊方格的子棋盘转化为特殊棋盘,可以用一个L型骨牌覆盖这3个较小棋盘的会合处,如 (b)所示,从而将原问题转化为4个较小规模的棋盘覆盖问题。递归地使用这种分割,直至棋盘简化为棋盘1×1。

    java 棋盘覆盖V1.0版

    寒假花了3、4天改进了一下棋盘覆盖游戏,支持电脑演示,也可自己过关,具体可自己玩 呵呵 有安装程序 我放在javaeye上别人说有毒,真是无语,结果版主还给我屏蔽了。。。 我用的是Smart Install Maker安装软件打包...

    15个典型的递归算法的JAVA实现

    15个典型的递归算法的JAVA实现,求N的阶乘、欧几里德算法(求最大公约数)、斐波那契数列、汉诺塔问题、树的三种递归遍历方式、快速排序、折半查找、图的遍历、归并排序、八皇后问题(回溯、递归)、棋盘覆盖(分治,...

Global site tag (gtag.js) - Google Analytics