棋盘覆盖

原创 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;
}

相关文章推荐

棋盘覆盖算法动态演示V4.02

  • 2016年07月30日 21:33
  • 83KB
  • 下载

覆盖残缺棋盘的代码

  • 2017年08月24日 11:02
  • 921B
  • 下载

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

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

棋盘覆盖问题

  • 2013年11月16日 17:28
  • 1KB
  • 下载

棋盘覆盖问题

  • 2014年07月18日 15:06
  • 271KB
  • 下载

棋盘覆盖问题 (分治法)

棋盘覆盖问题 问题的描述: ¢在一个 2k×2k个方格组成的棋盘中,若恰有一个方格与其他方格不同,称该方格为特殊方格,且称该棋盘为特殊棋盘(Defective Chessboard)。 ...
  • fofu33
  • fofu33
  • 2013年04月25日 21:59
  • 1674

棋盘覆盖问题

  • 2015年03月12日 11:40
  • 2.52MB
  • 下载

兰州交大C#棋盘覆盖作业

  • 2015年07月05日 19:20
  • 54KB
  • 下载

棋盘覆盖问题 分治法的典型应用

为了方便,我这里直接复制了别人的描述:原贴链接 棋盘覆盖 (一)原理介绍     在一个2^k * 2^k个方格组成的棋盘中,恰有一个方格与其它方格不同,称该方格为一特殊...

棋盘覆盖算法

  • 2014年07月12日 09:43
  • 2KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:棋盘覆盖
举报原因:
原因补充:

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