首页 > 代码库 > 棋盘覆盖问题【分治】
棋盘覆盖问题【分治】
棋盘覆盖问题 |
Time Limit: 1000ms, Special Time Limit:2500ms,Memory Limit:32768KB |
Total submit users: 95, Accepted users:36 |
Problem 10432 : No special judgement |
Problem description |
在一个2k x 2k ( 即:2^k x 2^k )个方格组成的棋盘中,恰有一个方格与其他方格不同,称该方格为一特殊方格,且称该棋盘为一特殊棋盘。在棋盘覆盖问题中,要用图示的4种不同形态的L型骨牌覆盖给定的特殊棋盘上除特殊方格以外的所有方格,且任何2个L型骨牌不得重叠覆盖。 |
Input |
输入文件第一行是一个整数T,表示有多少组测试数据,接下来是T组测试数据,共2T行,每组第一行为整数n,是2的n次幂(1<=n<=64),表示棋盘的大小为n*n,第二行是两个整数,代表特殊方格所在行号和列号。 |
Output |
先输出“CASE:i,然后按样例输出。数据间用制表符隔开(‘t’),每行最后一个数据后无制表符。 |
Sample Input |
220 082 2 |
Sample Output |
CASE:10 11 1CASE:23 3 4 4 8 8 9 93 2 2 4 8 7 7 95 2 0 6 10 10 7 115 5 6 6 1 10 11 1113 13 14 1 1 18 19 1913 12 14 14 18 18 17 1915 12 12 16 20 17 17 2115 15 16 16 20 20 21 21 |
Judge Tips |
要求遍历顺序按从左到右,从上到下。 |
Problem Source |
qshj |
#include <stdio.h>#define maxn 66int map[maxn][maxn], count;void chessBoard(int r, int c, int dr, int dc, int size){ if(size == 1) return; size >>= 1; int t = size, countt = count++; //is it in to-left if(dr < r + t && dc < c + t) //is chessBoard(r, c, dr, dc, size); else{ //not map[r+t-1][c+t-1] = countt; chessBoard(r, c, r+t-1, c+t-1, size); } //is it in top-right if(dr < r + t && dc >= c + t) chessBoard(r, c + t, dr, dc, size); else{ map[r+t-1][c+t] = countt; chessBoard(r, c + t, r+t-1, c+t, size); } //is it in buttom-left if(dr >= r + t && dc < c + t) chessBoard(r + t, c, dr, dc, size); else{ map[r+t][c+t-1] = countt; chessBoard(r + t, c, r+t, c+t-1, size); } //is it in buttom-right if(dr >= r + t && dc >= c + t) chessBoard(r+t, c+t, dr, dc, size); else{ map[r+t][c+t] = countt; chessBoard(r+t, c+t, r+t, c+t, size); }}void PrintBoard(int n){ int i, j; for(i = 0; i < n; ++i) for(j = 0; j < n; ++j) if(j != n - 1) printf("%d\t", map[i][j]); else printf("%d\n", map[i][j]);}int main(){ int t, n, dr, dc, cas = 1; scanf("%d", &t); while(t--){ scanf("%d%d%d", &n, &dr, &dc); count = 1; map[dr][dc] = 0; chessBoard(0, 0, dr, dc, n); printf("CASE:%d\n", cas++); PrintBoard(n); } return 0;}
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。