c++解决棋盘覆盖问题_C/C++_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > C/C++ > c++解决棋盘覆盖问题

c++解决棋盘覆盖问题

 2013/1/25 11:06:33  fly_yr  程序员俱乐部  我要评论(0)
  • 摘要:#include<iostream>#include<stdio.h>#defineBoard_size4//该棋盘矩阵的维度usingnamespacestd;intBoard[Board_size][Board_size];//声明该棋盘矩阵voidChessBoard(inttr,inttc,intdr,intdc,intsize)//tr,tc为最左上角的坐标,dr,dc为特殊方块所在的坐标,size为该棋盘的规模{if(size==1)return
  • 标签:解决 c++ 问题

#include <iostream>
#include <stdio.h>
#define Board_size 4//该棋盘矩阵的维度
using namespace std;

int Board[Board_size][Board_size];//声明该棋盘矩阵
void ChessBoard(int tr,int tc,int dr,int dc,int size)
//tr,tc为最左上角的坐标,dr,dc为特殊方块所在的坐标,size为该棋盘的规模
{
if(size == 1)
return;
static int tile=1;//定义L型骨牌号的初始使用标号
int t = tile++;//L型骨牌号
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][tc+s-1]=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-1][tc+s]=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(){
Board[2][2] = 0;//初始状态下特殊方格坐标为Board[0][0]
ChessBoard(0,0,2,2,Board_size);//Board_size
for(int i=0;i<Board_size;i++){//输出骨牌覆盖后的棋盘矩阵
for(int j=0;j<Board_size;j++)
cout<<" "<<Board[i][j];
cout<<endl;
}
return 0;
}

发表评论
用户名: 匿名