好吃的黑巧克力 2017-11-01 13:28 采纳率: 0%
浏览 2626

棋盘覆盖问题,用4种不同形态的L型骨牌覆盖在一个给定的特殊棋盘上

图片说明
类似上图棋盘覆盖问题,然后稍作改进,边长和特殊方格由自己输入,我遇到的问题是他虽然等划分,但是骨牌的类型与他对应的值(假如是0,1,2,3)不相同。
#include

int tile = 0;
int k = 1;
int Board[100][100];
void ChessBoard(int tr,int tc,int dr,int dc,int size){
if(size == 1){
return;
}

int t =tile++;
    t =t%4;
int s = size/2;
//覆盖左上角子棋盘
if(dr<tr+s && dc<tc+s){
    ChessBoard(tr,tc,dr,dc,s);
}
else{
    //用t形L型骨牌覆盖右下角
    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{
    //用t形L型骨牌覆盖左下角
    Board[tr+s-1][tc+s] = t;
    ChessBoard(tr,tc+s,tr+s-1,tc+s,s);
}
//覆盖左下角子棋盘
if(dr>=tr+s && dc< tc+s){
    //特殊方格在此棋盘中
    ChessBoard(tr+s,tc,dr,dc,s);
}
else{
    //用t形L型骨牌覆右上角
    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{
    //用t形L型骨牌覆盖左上角
    Board[tr+s][tc+s] = t;
    ChessBoard(tr+s,tc+s,tr+s,tc+s,s);
}

}
int main(){
int i = 0;
int j = 0;
int dr = 0;
int dc = 0;
printf("请输入边长:");
scanf("%d",&k);
printf("请输入断点的横坐标和纵坐标");
scanf("%d %d",&dr,&dc);
Board[dr-1][dc-1] = -1;
ChessBoard(0,0,dr-1,dc-1,k);

for(i=0;i<k;i++){
    for(j=0;j<k;j++){
        printf("%4d",Board[i][j]);
    }
    printf("\n");
}

}
运行结果如下图片说明
可以看到数字与骨牌并不对应,请教各位怎么让我的骨牌种类与数字对应起来

  • 写回答

0条回答 默认 最新

    报告相同问题?

    悬赏问题

    • ¥15 关于#python#的问题:求帮写python代码
    • ¥20 MATLAB画图图形出现上下震荡的线条
    • ¥15 LiBeAs的带隙等于0.997eV,计算阴离子的N和P
    • ¥15 关于#windows#的问题:怎么用WIN 11系统的电脑 克隆WIN NT3.51-4.0系统的硬盘
    • ¥15 来真人,不要ai!matlab有关常微分方程的问题求解决,
    • ¥15 perl MISA分析p3_in脚本出错
    • ¥15 k8s部署jupyterlab,jupyterlab保存不了文件
    • ¥15 ubuntu虚拟机打包apk错误
    • ¥199 rust编程架构设计的方案 有偿
    • ¥15 回答4f系统的像差计算