现在的位置: 首页 > 综合 > 正文

棋盘覆盖问题

2018年04月05日 ⁄ 综合 ⁄ 共 884字 ⁄ 字号 评论关闭

将矩阵进行划分,使不存在特殊方格的3大块子矩阵构成再中心构成所要求的类型的图形(若不存在特殊格,设置特殊格并且赋值,左上 ->右下,右上->左下,左下->右上,右下->左上,然后递归)。

#include"iostream"

using namespace std;
const int Max = 100;

int t;
int Board[Max][Max];

void Cover(int x,int y,int spx,int spy,int size){
	if(size==1)return;
	int s= size / 2;
	int m = ++t;
	if(spx<s+x&&spy<s+y){             //特殊格在左上角
		Cover(x,y,spx,spy,s);
	}
	else{
		Board[s+y-1][s+x-1]=m;
		Cover(x,y,s+x-1,s+y-1,s);
	}

	if(spx>=s+x&&spy<s+y){           //右上角
		Cover(x+s,y,spx,spy,s);
	}
	else{
		Board[s+y-1][s+x]=m;
		Cover(x+s,y,s+x,s+y-1,s);
	}

	if(spx<s+x&&spy>=s+y){            //左下角
		Cover(x,s+y,spx,spy,s);
	}
	else{
		Board[s+y][s+x-1]=m;
		Cover(x,y+s,s+x-1,s+y,s);
	}
	if(spx>=s+x&&spy>=s+y){            //右下角
		Cover(s+x,s+y,spx,spy,s);
	}
	else{
		Board[s+y][s+x]=m;
		Cover(s+x,s+y,s+x,s+y,s);
	}
}

int main(void){
	int s,r,c;
	cout << "请输入棋盘大小:";
	cin >> s;
	cout << "请输入特殊方块的行号(从0开始):";
	cin >> r;
	cout << "请输入特殊方块的列号(从0开始):";
	cin >> c;
	Cover(0,0,c,r,s);
	for(int i=0;i<s;i++){
		for(int j=0;j<s;j++){
			printf("%d ",Board[i][j]);
		}
		putchar('\n');
	}
	return 0;
}

 

抱歉!评论已关闭.