• 算法——棋盘覆盖问题


    #include<stdio.h>  

    int tile=0;//整型变量,记录L型骨牌的数量

    int Matrix[100][100];//定义数据结构

    void ChessBoard(int tr,int tc,int dr,int dc,int size)  

    {//tr和tc分别是棋盘左上角方格的行号、列号;dr和dc分别是特殊方格的行号、列号

    if(size==1)

    return;

    int t=tile++;//L型骨牌号,初值为0

    int s=size/2;//分割棋盘

    if(dr<tr+s&&dc<tc+s)//用L型骨牌号覆盖左上角子棋盘

    ChessBoard(tr,tc,dr,dc,s);// 特殊方格在此棋盘中

    else  

    {//特殊方格不在此棋盘中用,t号L型骨牌覆盖右下角

    Matrix[tr+s-1][tc+s-1]=t; // 覆盖本子棋盘中的其余方格

    ChessBoard(tr,tc,tr+s-1,tc+s-1,s);

    }  

    if(dr<tr+s&&dc>=tc+s)//用L型骨牌号覆盖右上角子棋盘

    ChessBoard(tr,tc,dr,dc,s);// 特殊方格在此棋盘中

    else  

    {//特殊方格不在此棋盘中用,t号L型骨牌覆盖左下角

    Matrix[tr+s-1][tc+s]=t;// 覆盖本子棋盘中的其余方格

    ChessBoard(tr,tc+s,tr+s-1,tc+s,s);

    }  

    if(dr>=tr+s&&dc<tc+s)//用L型骨牌号覆盖左下角子棋盘

    ChessBoard(tr+s,tc,dr,dc,s);// 特殊方格在此棋盘中

    else  

    {//特殊方格不在此棋盘中用,t号L型骨牌覆盖右上角

    Matrix[tr+s][tc+s-1]=t;// 覆盖本子棋盘中的其余方格

    ChessBoard(tr+s,tc,tr+s,tc+s-1,s);

    }  

    if(dr>=tr+s&&dc>=tc+s)//用L型骨牌号覆盖右上角子棋盘

    ChessBoard(tr+s,tc+s,dr,dc,s);// 特殊方格在此棋盘中

    else  

    {//特殊方格不在此棋盘中用,t号L型骨牌覆盖左上角

    Matrix[tr+s][tc+s]=t;// 覆盖本子棋盘中的其余方格

    ChessBoard(tr+s,tc+s,tr+s,tc+s,s);

    }   

    }  

    int main()

    {

    int size,r,c,row,col;  

     //memset(Matrix,0,sizeof(Matrix));

    for(int i=0;i<=100;i++)//初始化为零

    {

    for(int j=0;j<=100;j++)

    {

    Matrix[i][j]=0;

    }

    }  

    scanf("%d",&size);//输入棋盘大小

    scanf("%d%d",&row,&col);//输入特殊方格位置

    ChessBoard(0,0,row,col,size);  

    for (r = 0; r < size; r++)//输出棋盘覆盖结果

    {  

    for (c = 0; c < size; c++)

    {  

    printf("%2d ",Matrix[r][c]);

     }  

    printf(" ");

    }  

    return 0;

    }

    运行截图:

  • 相关阅读:
    UITableViewCell出现动画
    Block简单使用
    Storyboard可视化编程详解
    布局案例
    WebStorm-快捷键
    盒模型布局相关-基础与语法
    多线程编程-003-NSOPeration
    linux安装redis 和 使用
    mui iOS云打包修改权限提示语
    vue 合成图片
  • 原文地址:https://www.cnblogs.com/rourou123/p/8151461.html
Copyright © 2020-2023  润新知