`

棋盘覆盖算法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实现”是一个具体的编程实践,通过Java语言来解决棋盘覆盖问题。 棋盘覆盖问题是一个经典的分治问题,通常指的是将一个n×n的棋盘划分为大小为1×2的小矩形,使得这些小矩形...

    棋盘覆盖算法(Java)

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

    棋盘覆盖java实现代码

    3. 阅读和分析"棋盘覆盖.java"源代码,了解每个函数的作用,以及如何实现棋盘覆盖的逻辑。 4. 编写和运行代码,观察其运行结果,理解算法的执行过程。 5. 对比不同的算法实现,比如回溯法和贪心法,分析它们的优缺点...

    棋盘覆盖Java源码

    在"算法系列(一):棋盘覆盖"的博客文章中,作者可能详细解释了这些问题,讨论了分治策略在解决这个问题上的应用,以及如何通过Java代码实现这些概念。此外,他们可能还探讨了该问题的复杂性和优化技巧,如剪枝以减少...

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

    ChessBoard.java文件很可能是实现了棋盘覆盖算法的Java代码。 对于这两种问题,Java图形演示可能是指使用Java的Swing或JavaFX库来创建用户界面,动态展示圆盘或皇后移动的过程。用户可以点击按钮启动算法,程序会在...

    算法分析JAVA写的棋盘覆盖

    棋盘覆盖问题是一个经典的计算机科学问题,涉及到算法分析和编程实现。在这个问题中,目标是找到一种方法来覆盖一个棋盘(通常是8x8的国际象棋棋盘)的每个正方形,使得没有任何两个覆盖物重叠。这个问题常用于探讨...

    棋盘覆盖算法

    棋盘覆盖算法是一种在计算机科学中常见的问题,它涉及到图论和组合优化。在这个特定的编程作业中,我们关注的是一个二维棋盘的覆盖问题,其中...通过阅读和分析这个文件,你可以更深入地理解棋盘覆盖算法的实现方式。

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

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

    棋盘覆盖 java版本

    棋盘覆盖问题是一个经典的计算机科学问题,源自数学和图论领域...以上就是棋盘覆盖问题的Java实现所涉及的主要知识点。实际编写代码时,应根据具体需求和算法选择合适的实现方式,并不断优化以提高代码的可读性和性能。

    java棋盘覆盖实现演示程序

    Java棋盘覆盖实现演示程序是一种基于分治策略的算法应用,主要目的是用四种不同形态的L型骨牌来覆盖一个特殊棋盘上的所有方格,除了特定的特殊方格外。这个程序展示了如何在编程中解决这类问题,尤其适用于教学和...

    棋盘覆盖Java代码

    总的来说,棋盘覆盖问题的Java实现是学习算法和编程思维的好例子。通过理解和实践这个代码,初学者可以掌握递归、回溯、数据结构和算法设计的基本概念,这些技能在处理其他复杂问题时也十分有用。

    JAVA实现棋盘覆盖问题

    ### JAVA 实现棋盘覆盖问题 #### 知识点概览 ...通过上述分析可以看出,该程序成功实现了棋盘覆盖问题的解决方案,并利用了分治法的思想,借助Java语言的基础语法完成了一个实用而有趣的递归算法实现。

    棋盘覆盖算法代码

    ### 棋盘覆盖算法详解及Java实现 #### 一、背景介绍 棋盘覆盖问题是一种经典的计算机科学问题,涉及到递归与分治思想的应用。本篇将详细解析棋盘覆盖算法的核心概念,并通过Java语言具体实现算法逻辑。 #### 二、...

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

    全排列和棋盘覆盖是两种经典的计算机算法,它们在解决问题时体现了递归和分治策略的核心思想。在Java编程中,这些算法可以有效地帮助我们处理数据和优化问题解决的效率。 **全排列算法** 全排列是指从n个不同元素中...

    分治法-棋盘覆盖 java

    本文将详细介绍如何运用分治法解决“棋盘覆盖”这一经典问题,并给出相应的Java实现代码。 #### 二、问题定义 假设有一个\(2^k \times 2^k\)个方格组成的棋盘,其中恰好有一个特殊方格与众不同(通常表示为缺失或...

    qipan_棋盘覆盖算法.zip

    本篇将深入探讨棋盘覆盖问题以及如何利用分治算法进行求解,通过分析qipan.java代码来揭示其内在的逻辑结构。 棋盘覆盖问题源于经典的数学问题,通常指的是将一个n×n的棋盘用最少数量的皇后放置,使得每个皇后都...

    棋盘覆盖问题的实现

    棋盘覆盖问题是计算机科学中的一个经典问题,涉及到递归算法的应用。该问题要求使用特定形状的骨牌(通常为 L 形)来完全覆盖一个有特殊标记的 n×n 的棋盘,除了特殊标记的地方以外的所有方格都需要被覆盖,而且...

    java_图形化界面-流水作业最优调度问题以及棋盘覆盖问题源码整理

    在这个“java_图形化界面-流水作业最优调度问题以及棋盘覆盖问题源码整理”中,我们将深入探讨如何利用Java来解决两个经典的计算机科学问题:流水作业最优调度和棋盘覆盖问题。 首先,流水作业最优调度问题是一个...

Global site tag (gtag.js) - Google Analytics