棋盘覆盖

原创 2012年03月30日 13:55:48
/*
    0 0 0 1 2
*/
#include <stdio.h>
#include <stdlib.h>
#define MAXSIZE 100
int total = 0;
void chessBoard(int, int, int, int, int);
int board[MAXSIZE][MAXSIZE];
int power(int);
int main(void)
{
    int i, j;
    int tr, tc, dr, dc, k;
    int size;
    scanf("%d %d %d %d %d", &tr, &tc, &dr, &dc, &k);
    size = power(k);
    chessBoard(tr, tc, dr, dc, size);
    board[dr][dc] = -1;
    printf("after chessBoard:\n");
    for (i = 0; i < size; ++i)
    {
        for (j = 0; j < size; ++j)
        {
            printf("%5d ", board[i][j]);
        }
        printf("\n");
    }
    return 0;
}
void chessBoard(int tr, int tc, int dr, int dc, int size)
{
    if (1 == size)
    {
        return ;
    }
    int t = total++;
    int s = size / 2;
    //左上角
    if (dr < tr + s && dc < tc +s)
    {
        chessBoard(tr, tc, dr, dc, s);
    }
    else
    {
        board[tr + s - 1][tc + s - 1] = t;
        chessBoard(tr, tc, tr + s - 1, tc + s - 1, s);
    }
    //右上角
    if (dr < tr + s && dc >= tc + s)
    {
        chessBoard(tr, tc + s, dr, dc, s);
    }
    else
    {
        board[tr + s - 1][tc + s] = t;
        chessBoard(tr, tr + s, tr + s - 1, tc + s, s);
    }
    //左下角
    if (dr >= tr + s && dc < tc + s)
    {
        chessBoard(tr + s, tc, dr, dc, s);
    }
    else
    {
        board[tr + s][tc + s - 1] = t;
        chessBoard(tr + s, tc, tr + s, tc + s - 1, s);
    }
    //右下角
    if (dr >= tr + s && dc >= tc + s)
    {
        chessBoard(tr + s, tc + s, dr, dc, s);
    }
    else
    {
        board[tr + s][tc + s] = t;
        chessBoard(tr + s, tc + s, tr + s, tc + s, s);
    }
}
//计算2^n
int power(int n)
{
    int i;
    int result = 1;
    for (i = 0; i < n; ++i)
    {
        result *= 2;
    }
    return result;
}

棋盘覆盖问题 C++实现11

本算法,简单概述就是利用L型的骨牌,填充2^k*2^k的方形棋盘。其中棋盘用2维数组表示,这里用vector board表示。 我发现关于本算法,百度百科的说明和《算法设计与分析》这本书是一样的,错的...
  • kenden23
  • kenden23
  • 2013年10月22日 12:27
  • 2003

棋盘覆盖问题(分治)(C语言)

(棋盘覆盖问题)在一个2k × 2k 个方格组成的棋盘中恰有一个方格与其他方格不同(图中标记为-1 的方格),称之为特殊方格。现用L 型(占3 个小格)纸片覆盖棋盘上除特殊方格的所有部分,各纸片不得重...
  • wxf1995
  • wxf1995
  • 2009年10月11日 22:27
  • 3738

算法设计与分析——棋盘覆盖问题

在一个2^k * 2^k个方格组成的棋盘中,恰有一个方格与其他方格不同,称该方格为一特殊方格,且称该棋盘为一特殊棋盘。该棋盘为特殊棋盘,蓝色的方格为特殊方格。棋盘覆盖问题是指,要用图2中的4种不同形态...
  • sunshine__0411
  • sunshine__0411
  • 2017年11月01日 14:34
  • 333

js算法:分治法-棋盘覆盖

附代码: New Document table,td{ border:1px solid gray; } ...
  • jrn1012
  • jrn1012
  • 2015年08月21日 17:02
  • 1375

棋盘覆盖(nyoj 45)

题目链接:
  • u013207805
  • u013207805
  • 2014年04月08日 15:47
  • 491

算法设计与分析之分治法——棋盘覆盖

一:算法分析 棋盘覆盖问题要求在2^k * 2^k 个方格组成的棋盘中,你给定任意一个特殊点,用一种方案实现对除该特殊点的棋盘实现全覆盖。 建立模型如图: 解决方案就是利用分治法...
  • usher_ou
  • usher_ou
  • 2017年04月19日 17:36
  • 468

经典算法之棋盘覆盖问题 --分治法

一:算法分析 棋盘覆盖问题要求在2^k * 2^k 个方格组成的棋盘中,你给定任意一个特殊点,用一种方案实现对除该特殊点的棋盘实现全覆盖。 建立模型如图: 解决方案就是利用分治法,将方形棋盘分成4部...
  • FreeeLinux
  • FreeeLinux
  • 2016年09月29日 11:44
  • 8625

分治法实现棋盘覆盖C++

#include using namespace std; const int size = 8; static int tile = 1; static int board[size][size] ...
  • J_Anson
  • J_Anson
  • 2017年06月05日 20:59
  • 434

棋盘覆盖问题 分治法

#include #include using namespace std; int Board[105][105]; static int tile=1; void ChessBoard(in...
  • xunfengdumo
  • xunfengdumo
  • 2017年04月04日 19:49
  • 326

分治法——棋盘覆盖问题

分治法——棋盘覆盖问题 棋盘覆盖问题。有一个2k∗2k2^k*2^k的方格棋盘,恰有一个方格是黑色的,其他为白色。你的任务是用包含3个方格的L型牌覆盖所有白色方格。黑色方格不能被覆盖,且任意一个白...
  • q547550831
  • q547550831
  • 2016年05月30日 21:59
  • 4720
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:棋盘覆盖
举报原因:
原因补充:

(最多只允许输入30个字)