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

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
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
好的,以下是Triomino拼图的C语言代码: ```c #include <stdio.h> #include <stdbool.h> #define SIZE 3 void TrominoTile(int x_board, int y_board, int x_missing, int y_missing, int size_board, int board[SIZE][SIZE]) { int x_center, y_center, count; if (size_board == 1) { return; } count = 0; x_center = x_board + size_board / 2; y_center = y_board + size_board / 2; if (x_missing < x_center && y_missing < y_center) { count++; board[x_center - 1][y_center] = count; board[x_center][y_center - 1] = count; board[x_center][y_center] = count; TrominoTile(x_board, y_board, x_missing, y_missing, size_board / 2, board); TrominoTile(x_board, y_center, x_center - 1, y_center, size_board / 2, board); TrominoTile(x_center, y_board, x_center, y_center - 1, size_board / 2, board); TrominoTile(x_center, y_center, x_center, y_center, size_board / 2, board); } else if (x_missing < x_center && y_missing >= y_center) { count++; board[x_center - 1][y_center - 1] = count; board[x_center][y_center - 1] = count; board[x_center][y_center] = count; TrominoTile(x_board, y_board, x_center - 1, y_center - 1, size_board / 2, board); TrominoTile(x_board, y_center, x_missing, y_missing, size_board / 2, board); TrominoTile(x_center, y_board, x_center, y_center - 1, size_board / 2, board); TrominoTile(x_center, y_center, x_center, y_center, size_board / 2, board); } else if (x_missing >= x_center && y_missing < y_center) { count++; board[x_center - 1][y_center - 1] = count; board[x_center - 1][y_center] = count; board[x_center][y_center] = count; TrominoTile(x_board, y_board, x_center - 1, y_center - 1, size_board / 2, board); TrominoTile(x_board, y_center, x_center - 1, y_center, size_board / 2, board); TrominoTile(x_center, y_board, x_missing, y_missing, size_board / 2, board); TrominoTile(x_center, y_center, x_center, y_center, size_board / 2, board); } else { // (x_missing >= x_center && y_missing >= y_center) count++; board[x_center - 1][y_center - 1] = count; board[x_center][y_center - 1] = count; board[x_center - 1][y_center] = count; TrominoTile(x_board, y_board, x_center - 1, y_center - 1, size_board / 2, board); TrominoTile(x_board, y_center, x_center - 1, y_center, size_board / 2, board); TrominoTile(x_center, y_board, x_center, y_center - 1, size_board / 2, board); TrominoTile(x_center, y_center, x_missing, y_missing, size_board / 2, board); } } void PrintBoard(int board[SIZE][SIZE]) { for (int i = 0; i < SIZE; i++) { for (int j = 0; j < SIZE; j++) { printf("%2d ", board[i][j]); } printf("\n"); } } int main() { int board[SIZE][SIZE] = {{0}}; int x_missing, y_missing; printf("请输入缺失方块的坐标(x, y):"); scanf("%d%d", &x_missing, &y_missing); board[x_missing][y_missing] = -1; // 标记缺失方块 TrominoTile(0, 0, x_missing, y_missing, SIZE, board); printf("Triomino拼图如下:\n"); PrintBoard(board); return 0; } ``` 在代码中,先定义了一个`TrominoTile`函数,用于填充拼图。其中,`x_board`和`y_board`表示当前矩阵的左上角坐标,`size_board`表示当前矩阵的大小,`x_missing`和`y_missing`表示缺失方块的坐标。当`size_board`等于1时,表示只有一个方块,直接返回;否则,根据缺失方块所在的象限,将矩阵分为四个子矩阵,递归调用`TrominoTile`函数进行填充。 在`main`函数中,先将缺失方块位置标记为-1,然后调用`TrominoTile`函数进行填充。最后,调用`PrintBoard`函数打印填充后的矩阵。 希望能够帮到你!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值