棋盘覆盖算法

原创 2007年10月05日 22:10:00

根据书上给的算法 ,我写了这个小程序,见笑了。

 

#include <stdio.h>
 
#define MAXSIZE 16
 
int  chess[MAXSIZE][MAXSIZE];
void chess_board(int tr, int tc, int dr, int dc, int size)
...{
    
static int tile = 1;
 
    
if(1==size) return;
 
    
int t = tile++;
    
int s = size/2;
 
    
/**//**//**//* ---- left-up corner ---- */
    
if(dr<tr+&& dc<tc+s)...{
        chess_board(tr, tc, dr, dc, s);
    }
 else ...{
        chess[tr
+s-1][tc+s-1= t;
        chess_board(tr, tc, tr
+s-1, tc+s-1, s);
    }

 
    
/**//**//**//* ---- right-up corner --- */
    
if(dr<tr+&& dc>=tc+s)...{
        chess_board(tr, tc
+s, dr, dc, s);
    }
 else ...{
        chess[tr
+s-1][tc+s] = t;
        chess_board(tr, tc
+s, tr+s-1, tc+s, s);
    }

 
    
/**//**//**//* ---- left-down corner--- */
    
if(dr>=tr+&& dc<tc+s)...{
        chess_board(tr
+s, tc, dr, dc, s);
    }
 else ...{
        chess[tr
+s][tc+s-1= t;
        chess_board(tr
+s, tc, tr+s, tc+s-1, s);
    }

 
    
/**//**//**//* ---- right-down corner-- */
    
if(dr>=tr+&& dc>=tc+s)...{
        chess_board(tr
+s, tc+s, dr, dc, s);
    }
 else ...{
        chess[tr
+s][tc+s] = t;
        chess_board(tr
+s, tc+s, tr+s, tc+s, s);
    }

}

 
void print_chess(int size,int a,int b)
...{
    
int i, j;
    
for(i = 0; i<size; i++)...{
        
for(j=0; j<size; j++)...{
            
if(i==(a-1)&&j==(b-1))
                printf(
"%3c",2);
            
else
                printf(
"%3d",chess[i][j]);
        }

           printf(
" ");
    }

}

 
int main( int argc, char *argv[] )
...{
    
int a=0,b=0,c=0;
    printf(
"********************************************************* ");
    printf(
"* 实验一:棋盘覆盖算法 * ");
    printf(
"********************************************************* ");
    printf(
" 请输入您的棋盘的边长(注意:边长需要是2的N次方数):");
    scanf(
"%d",&a);
    
while(a>MAXSIZE)
    
...{
        printf(
"您输入的棋盘太大了,无法完成绘画: ");
        printf(
" 请输入您的棋盘的边长(注意:边长需要是2的N次方数):");
        scanf(
"%d",&a);
    }

    printf(
"请输入您的棋盘的特殊方格的位置(中间逗号隔开):");
    scanf(
"%d,%d",&b,&c);
    printf(
"您的棋盘: ");
    print_chess(a,b,c);
    chess_board(
00, b-1, c-1, a);
    printf(
"您实现棋盘覆盖后的棋盘: ");
    print_chess(a,b,c);
    printf(
"谢谢使用,再见!_ ");
    
return 0;
}
  

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

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

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

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

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

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

棋盘覆盖问题、半数集问题算法解析-C语言

问题一:棋盘覆盖问题      对于一个规模为的棋盘,其中有一个方格和其他方格完全不同,称这一方格为特殊方格,且称该棋盘为特殊棋盘,设计一种算法可以使用4种不同的L型骨牌来填充棋牌。 解答:采用分...
  • beep_
  • beep_
  • 2015年12月10日 20:35
  • 1393

分治法实现棋盘覆盖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
  • 435

java实现的棋盘覆盖

算法设计与分析 第二版
  • u012270113
  • u012270113
  • 2014年04月25日 09:58
  • 2429

棋盘覆盖【递归分治法】

棋盘覆盖问题的讨论,求解 题目是这样的:N*N的棋盘上,需要用L型骨牌覆盖,只能保证一个特殊字格空出来,给出特殊字格的位置,求出所有的L型骨牌的摆放位置。#includeusing namespac...
  • m0_37789800
  • m0_37789800
  • 2017年09月15日 20:38
  • 123

算法系列(一):分治策略--棋盘覆盖

算法系列(一):棋盘覆盖 一、分析 问题描述:   图1-1 k=2时的一个特殊棋盘 在一个 2^k * 2^k 个方格组成的棋盘中,若恰有一个方格与其它方格不同,则称该方格为一特殊方格,且称该棋...
  • qq_22145801
  • qq_22145801
  • 2016年11月10日 10:54
  • 430

算法分析与设计2017-1-棋盘覆盖问题算法

棋盘覆盖问题算法#include int tile=1; int board[100][100]; //可以用一个二维数组board[size][size]表示一个棋盘,其中,size=2^k。这里...
  • qq_22871083
  • qq_22871083
  • 2017年03月17日 15:00
  • 183

算法[递归]-棋盘覆盖问题

递归解题的三要素 (1):最小情况 (2):原问题与子问题同型 (3):原问题的解可以用子问题的解来构造 棋盘覆盖问题的描述 在一个2的k次方 X 2的k次方 (此处数学公式的插...
  • tongyijia
  • tongyijia
  • 2016年09月21日 00:32
  • 709
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:棋盘覆盖算法
举报原因:
原因补充:

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