zoukankan      html  css  js  c++  java
  • 算法——棋盘覆盖问题

    #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;

    }

    运行截图:

  • 相关阅读:
    BroadcastReceiver总结
    一二三(The Seventh Hunan Collegiate Programming Contest)
    使用 JQueryMobile 点击超链接提示“error loading page” 错误
    盒子游戏(The Seventh Hunan Collegiate Programming Contest)
    遗留系统升级改造方案思路
    根据外接鼠标控制笔记本触摸板禁用或启用
    设计模式之策略模式
    android4.3环境搭建
    清晰明亮的白色lua协程(coroutine)
    基于JUnit和Ant测试程序正在运行使用Kieker(AspectJ)监测方法
  • 原文地址:https://www.cnblogs.com/rourou123/p/8151461.html
Copyright © 2011-2022 走看看