题目描述
Tromino 是指一个由棋盘上的三个方块组成的 L 型骨牌。如何用 Tromino 覆盖一个缺
少了一个方块(可以在棋盘上任何位置)的棋盘(下图展示了情况)。除了这个缺失的方
块,Tromino 应该覆盖棋盘上的所有方块,Tromino 可以任意转向但不能有重叠。
实现思想
使用变量标记区域坐标信息,随机生成L区域颜色。使用L区域的3个格子和随机生成的一个格子把每一个象限里都实现涂鸦一个格子。然后递归调用函数把每一个区域涂鸦,直到剩下的区域尺寸为2x2时结束调用。
数据结构:变量储存坐标信息
实现步骤:L区域的3个格子和随机生成的一个格子把每一个象限里都实现涂鸦一个格子。然后递归调用函数把每一个区域涂鸦,知道剩下的区域尺寸为2x2时结束调用。
实现技巧:递归的去实现涂鸦每一个象限的方格,我认为时很方便的处理方法。这样可以避免处理循环以及各种问题。
时间复杂度为:O(n^2)
空间复杂度:O(n^2)
结果
代码
package CourseDesign;
import javafx.application.Application;
import javafx.application.Platform;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.paint.Color;
import javafx.scene.paint.Paint;
import javafx.scene.shape.Line;
import javafx.scene.shape.Rectangle;
import javafx.stage.Stage;
import java.util.Random;
public class A1 extends Application {
Group group = new Group();
Scene scene = new Scene(group, 800, 800);
Rectangle rectangle = null;
@Override
public void start(Stage primaryStage) throws Exception {
// ***************
int pow = 16;//界面
int size = 50;//小格子的大小
//****************
Random random = new Random();
// 画线
for (int i = 0; i < pow + 1; i++) {
// 横线
Line line = new Line(0, i * size, 50 * pow, i * size);
line.setStroke(Color.RED);
group.getChildren().add(line);
// 竖线
line = new Line(i * size, 0, i * size, 50 * pow);
line.setStroke(Color.RED);
group.getChildren().add(line);
}
// 最开始的黑点
int x = random.nextInt(pow) * size;
int y = random.nextInt(pow) * size;
rectangle = new Rectangle(x, y, size, size);
group.getChildren().add(rectangle);
// 建立一个线程开始涂棋盘
Thread thread = new<