下面是我写的一个关于棋盘覆盖问题的算法,用四种颜色来实现四个图形对其进行的覆盖:
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语言来解决棋盘覆盖问题。 棋盘覆盖问题是一个经典的分治问题,通常指的是将一个n×n的棋盘划分为大小为1×2的小矩形,使得这些小矩形...
棋盘覆盖算法(Java) 算法分析与设计中的内容!!!
3. 阅读和分析"棋盘覆盖.java"源代码,了解每个函数的作用,以及如何实现棋盘覆盖的逻辑。 4. 编写和运行代码,观察其运行结果,理解算法的执行过程。 5. 对比不同的算法实现,比如回溯法和贪心法,分析它们的优缺点...
在"算法系列(一):棋盘覆盖"的博客文章中,作者可能详细解释了这些问题,讨论了分治策略在解决这个问题上的应用,以及如何通过Java代码实现这些概念。此外,他们可能还探讨了该问题的复杂性和优化技巧,如剪枝以减少...
ChessBoard.java文件很可能是实现了棋盘覆盖算法的Java代码。 对于这两种问题,Java图形演示可能是指使用Java的Swing或JavaFX库来创建用户界面,动态展示圆盘或皇后移动的过程。用户可以点击按钮启动算法,程序会在...
棋盘覆盖问题是一个经典的计算机科学问题,涉及到算法分析和编程实现。在这个问题中,目标是找到一种方法来覆盖一个棋盘(通常是8x8的国际象棋棋盘)的每个正方形,使得没有任何两个覆盖物重叠。这个问题常用于探讨...
棋盘覆盖算法是一种在计算机科学中常见的问题,它涉及到图论和组合优化。在这个特定的编程作业中,我们关注的是一个二维棋盘的覆盖问题,其中...通过阅读和分析这个文件,你可以更深入地理解棋盘覆盖算法的实现方式。
使用JAVA解决残缺棋盘覆盖问题:一个n*n的棋盘上有一个缺陷点,该点不能被覆盖,剩下的格子全部用三盒板覆盖。应用的是分治法。
棋盘覆盖问题是一个经典的计算机科学问题,源自数学和图论领域...以上就是棋盘覆盖问题的Java实现所涉及的主要知识点。实际编写代码时,应根据具体需求和算法选择合适的实现方式,并不断优化以提高代码的可读性和性能。
Java棋盘覆盖实现演示程序是一种基于分治策略的算法应用,主要目的是用四种不同形态的L型骨牌来覆盖一个特殊棋盘上的所有方格,除了特定的特殊方格外。这个程序展示了如何在编程中解决这类问题,尤其适用于教学和...
总的来说,棋盘覆盖问题的Java实现是学习算法和编程思维的好例子。通过理解和实践这个代码,初学者可以掌握递归、回溯、数据结构和算法设计的基本概念,这些技能在处理其他复杂问题时也十分有用。
### JAVA 实现棋盘覆盖问题 #### 知识点概览 ...通过上述分析可以看出,该程序成功实现了棋盘覆盖问题的解决方案,并利用了分治法的思想,借助Java语言的基础语法完成了一个实用而有趣的递归算法实现。
### 棋盘覆盖算法详解及Java实现 #### 一、背景介绍 棋盘覆盖问题是一种经典的计算机科学问题,涉及到递归与分治思想的应用。本篇将详细解析棋盘覆盖算法的核心概念,并通过Java语言具体实现算法逻辑。 #### 二、...
全排列和棋盘覆盖是两种经典的计算机算法,它们在解决问题时体现了递归和分治策略的核心思想。在Java编程中,这些算法可以有效地帮助我们处理数据和优化问题解决的效率。 **全排列算法** 全排列是指从n个不同元素中...
本文将详细介绍如何运用分治法解决“棋盘覆盖”这一经典问题,并给出相应的Java实现代码。 #### 二、问题定义 假设有一个\(2^k \times 2^k\)个方格组成的棋盘,其中恰好有一个特殊方格与众不同(通常表示为缺失或...
本篇将深入探讨棋盘覆盖问题以及如何利用分治算法进行求解,通过分析qipan.java代码来揭示其内在的逻辑结构。 棋盘覆盖问题源于经典的数学问题,通常指的是将一个n×n的棋盘用最少数量的皇后放置,使得每个皇后都...
棋盘覆盖问题是计算机科学中的一个经典问题,涉及到递归算法的应用。该问题要求使用特定形状的骨牌(通常为 L 形)来完全覆盖一个有特殊标记的 n×n 的棋盘,除了特殊标记的地方以外的所有方格都需要被覆盖,而且...
在这个“java_图形化界面-流水作业最优调度问题以及棋盘覆盖问题源码整理”中,我们将深入探讨如何利用Java来解决两个经典的计算机科学问题:流水作业最优调度和棋盘覆盖问题。 首先,流水作业最优调度问题是一个...