算法设计棋盘覆盖问题c语言,棋盘覆盖问题(用分治法求解)
// 棋盤覆蓋
#include
#include
int Board[8][8]={0};//定義棋盤并初始化棋盤
void ChessBoard(int tr,int tc,int dr,int dc,int size,int &tile);
void main()
{
int tile=0;
cout<
int x,y;
cin>>x>>y;
ChessBoard(0,0,x,y,8,tile);
cout<
for(int i=0;i<8;i++)
{
for(int j=0;j<8;j++)
{
cout<
}
cout<
}
}
void ChessBoard(int tr,int tc,int dr,int dc,int size,int &tile)
{//采用分治策略的棋盤算法 c是列,r是行
if(size==1)
return;
++tile;//L型骨牌號
int s=size/2;//分割棋盤
if(dr
{//特殊方格在左上角棋盤中
Board[tr+s-1][tc+s]=tile;//覆蓋右上角子棋盤的左下角
Board[tr+s][tc+s-1]=tile;//覆蓋左下角子棋盤的右上角
Board[tr+s][tc+s]=tile;//覆蓋右下角子棋盤 的左上角
ChessBoard(tr,tc,dr,dc,s,tile);//覆蓋左上角子棋盤
ChessBoard(tr,tc+s,tr+s-1,tc+s,s,tile);//覆蓋右上角子棋盤
ChessBoard(tr+s,tc,tr+s,tc+s-1,s,tile);//覆蓋左下角子棋盤
ChessBoard(tr+s,tc+s,tr+s,tc+s,s,tile);//覆蓋右下角子棋盤
}
else if(dr
=tc+s){//特殊方格在右上角棋盤中
Board[tr+s-1][tc+s-1]=tile;
Board[tr+s][tc+s-1]=tile;
Board[tr+s][tc+s]=tile;
ChessBoard(tr,tc,tr+s-1,tc+s-1,s,tile);//覆蓋左上角子棋盤
ChessBoard(tr,tc+s,dr,dc,s,tile);//覆蓋右上角子棋盤
ChessBoard(tr+s,tc,tr+s,tc+s-1,s,tile);//覆蓋左下角子棋盤
ChessBoard(tr+s,tc+s,tr+s,tc+s,s,tile);//覆蓋右下角子棋盤
}
else if(dr>=tr+s&&dc
{//特殊方格在左下角棋盤中
Board[tr+s-1][tc+s-1]=tile;
Board[tr+s-1][tc+s]=tile;
Board[tr+s][tc+s]=tile;
ChessBoard(tr,tc,tr+s-1,tc+s-1,s,tile);//覆蓋左上角子棋盤
ChessBoard(tr,tc+s,tr+s-1,tc+s,s,tile);//覆蓋右上角子棋盤
ChessBoard(tr+s,tc,dr,dc,s,tile);//覆蓋左下角子棋盤
ChessBoard(tr+s,tc+s,tr+s,tc+s,s,tile);//覆蓋右下角子棋盤
}
else if(dr>=tr+s&&dc>=tc+s)
{//特殊方格在右下角棋盤中
Board[tr+s-1][tc+s-1]=tile;
Board[tr+s-1][tc+s]=tile;
Board[tr+s][tc+s-1]=tile;
ChessBoard(tr,tc,tr+s-1,tc+s-1,s,tile);//覆蓋左上角子棋盤
ChessBoard(tr,tc+s,tr+s-1,tc+s,s,tile);//覆蓋右上角子棋盤
ChessBoard(tr+s,tc,tr+s,tc+s-1,s,tile);//覆蓋左下角子棋盤
ChessBoard(tr+s,tc+s,dr,dc,s,tile);//覆蓋右下角子棋盤
}
else
cout<
}
總結(jié)
以上是生活随笔為你收集整理的算法设计棋盘覆盖问题c语言,棋盘覆盖问题(用分治法求解)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 天津理工上机c语言报告5,天津理工大学c
- 下一篇: android roboto字体下载,A