# 递归与分治之棋盘覆盖问题

python实现代码如下：

``` 1 # coding =gbk
2
3
4 # tr左上角行号，tc左上角列号。dr特殊方格行号，dc特殊方格列号
5 def chessboard(board, size, tr, tc, dr, dc):
6     if size <= 1:
7         return
8     global tile
9     tile += 1
10     current_tile = tile
11     size //= 2
12     if dr < tr + size and dc < tc + size:
13         chessboard(board, size, tr, tc, dr, dc)
14     else:
15         board[tr + size - 1][tc + size - 1] = current_tile
16         chessboard(board, size, tr, tc, tr + size - 1, tc + size - 1)
17     if dr >= tr + size and dc < tc + size:
18         chessboard(board, size, tr + size, tc, dr, dc)
19     else:
20         board[tr + size][tc + size - 1] = current_tile
21         chessboard(board, size, tr + size, tc,
22                    tr + size, tc + size - 1)
23     if dr < tr + size and dc >= tc + size:
24         chessboard(board, size, tr, tc + size, dr, dc)
25     else:
26         board[tr + size - 1][tc + size] = current_tile
27         chessboard(board, size, tr, tc + size,
28                    tr + size - 1, tc + size)
29     if dr >= tr + size and dc >= tc + size:
30         chessboard(board, size, tr + size, tc + size, dr, dc)
31     else:
32         board[tr + size][tc + size] = current_tile
33         chessboard(board, size, tr + size, tc + size,
34                    tr + size, tc + size)
35
36
37 tile = 0
38 chessboard_size = 4
39 board = [[0 for x in range(chessboard_size)] for y in range(chessboard_size)]
40 chessboard(board, chessboard_size, 0, 0, 1, 0)
41
42 board = [[row[i] for row in board] for i in range(len(board[0]))]
43 for lst in board:
44     print(lst)```

0 条评论

• ### 数据结构之链表、栈和队列 java代码实现

定义抽象节点类Node： 1 package cn.wzbrilliant.datastructure; 2 3 /** 4 * 节点 5 * ...

• ### Jsp语法、指令及动作元素

一、JSP的语法 1、JSP的模板元素：(先写HTML) 　　　就是JSP中的那些HTML标记 　　　作用：页面布局和美化 2、JSP的Java脚本表达式： 　...

• ### C语言中size_t和size_type 的区别

1）size_tsize_t是用于数组的下标值类型，也可以用来“接收”sizeof操作符的返回值。

• ### C 库函数 - fread()

C 库函数 size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream) 从给定流 stre...

• ### JS的函数调用栈有多深？

译者按： 有时候会遇到 Maximum call stack size exceeded 的问题，本文教你 stack size 的计算方法。

• ### pytorch之Resize()函数具体使用详解

CLASS torchvision.transforms.Resize(size, interpolation=2)

• ### 880.Decoded String at Index

思路 用size表示在i处，字符串进行解码后的长度。 如果有一个解码后的字符串为appleappleappleappleappleapple，且K=24，那...