Triomino问题,即用一个L形的瓦片(有三个小正方形组成)覆盖一个缺少了一个方块(可以是棋盘上的 任何位置)的2^n X 2^n棋盘

这是一个动态演示程序,通过分治法解决如何用L形瓦片覆盖2^n X 2^n棋盘,其中缺少一个方块。用户可以指定缺少方块的位置,并观察动态填充过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Triomino问题的动态演示程序。

源代码:

/**
* 此程序用于解决的问题是:用一个L形的瓦片(有三个小正方形组成)覆盖一个缺少了一个方块(可以是棋盘上的
* 任何位置)的2^n X 2^n棋盘
*/
import javax.swing.*;
import java.awt.*;
import java.applet.*;
import java.awt.geom.*;
import java.awt.event.*;

public class Triomino extends JApplet implements ActionListener , Runnable
{
 private JLabel lx;
 private JLabel ly;
 private JTextField tx;
 private JTextField ty;
 private JButton begin;
 private JButton stop;
 private Image image0;
 private Image image1;
 private Thread demo;
 private int x,y;

 int chessBoard[][] = new int [9][9];//定义一个8 x 8的棋盘
 //private int x,y;

 public void init()
 {
  for(int i=0; i<9; i++)
   for(int j=0; j<9; j++)
   chessBoard[i][j] = 0;
  Container content = getContentPane();
  content.setLayout(new BorderLayout());
  JPanel cotrlPane = new JPanel();
  cotrlPane.setLayout(new FlowLayout());
  //setLayout(null);
  lx = new JLabel("x:");
  cotrlPane.add(lx);
  tx = new JTextField(10);
  cotrlPane.add(tx);
  ly = new JLabel("y:");
  cotrlPane.add(ly);
  ty = new JTextField(10);
  cotrlPane.add(ty);
  begin = new JButton("开始");
  begin.addActionListener(this);
  cotrlPane.add(begin);

  stop = new JButton("清除");
  stop.addActionListener(this);
  cotrlPane.add(stop);

  content.add(cotrlPane, BorderLayout.SOUTH);
  
 }
 /**
 * 0:表示用蓝色方块覆盖棋盘
 * 1:表示用红色方块覆盖棋盘
 * 2:表示用绿色方块覆盖棋盘
 * 3:表示用黑色方块覆盖棋盘,棋盘上被标记为黄色的方块,表示棋盘被分为四部分以后,最中间的四个方块
 *   中,将其中三个所在的部分不包含缺少方块的方块,标记为黑色
 * 4:表示用黄色方块覆盖棋盘,棋盘上被标记为黄色的方块,表示缺少的那个方块
 */
 public void paint(Graphics g)
 {
  Graphics2D g2D = (Graphics2D)g;
  Rectangle2D.Float rectangle;
  
  for(int i=1; i<=8; i++)
   for(int j =1; j<=8; j++)
   {
    switch(chessBoard[i][j])
    {
     case 0:
     {
      g2D.setPaint(Color.blue);
      break;
     }
     case 1:
     {
      g2D.setPaint(Color.red);
      break;
     }
     case 2:

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值