欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

残缺的棋盘

程序员文章站 2023-12-24 12:08:39
...

残缺的棋盘

粉色区域为破损区域,先将棋盘看做四大区域,在棋盘的中心点附近添加色块,要求是四大区域中有破损的那一块不添加色块,得到黄色区域,然后将四大区域的每块都看做是一张棋盘进行递归

(这时我老师当初讲的)

当k>0时,将2^k×2^k棋盘分割为4个2^k-1×2^k-1 
特殊方格必位于4个较小子棋盘之一中,其余3个子棋盘中无特殊方格。为了将这3个无特殊方格的子棋盘转化为特殊棋盘,可以用一个硬纸板覆盖这3个较小棋盘的会合处,从而将原问题转化为4个较小规模的棋盘覆盖问题。递归地使用这种分割,直至棋盘简化为棋盘1×1

残缺的棋盘

发布时间: 2017年5月23日 11:21   时间限制: 1000ms   内存限制: 128M

有一正方形棋盘,其边长为2^k1<k<10),如图a所示,其中有一格损坏。现在想用图b所示形状的硬纸板将没有坏的所有格子盖起来。而硬纸板不得放入坏格中和棋盘外。编程输出一种覆盖方案

残缺的棋盘

输入: k  残缺格的坐标x,y(0<=x,y<2^k)

输出: 数字方阵,用7表示残缺的格

复制
2 1 3
1 1 2 2 
1 2 2 2 
1 1 2 4 
1 7 4 4 
#include<stdio.h>
int an[1100][1100];
void chess(int size,int x,int y,int posx,int posy);
int main()
{
	int k,x,y;
	scanf("%d%d%d",&k,&x,&y);
	chess((1<<k),y,x,0,0);
	an[y][x]=7;
	for(int i=0;i<(1<<k);i++)
	{
		for(int j=0;j<(1<<k);j++)
		{
			printf("%d ",an[i][j]);
		}
		if(1!=(1<<k)-1)
			putchar('\n');
	}
	return 0;
}
void chess(int size,int x,int y,int posx,int posy)
{
	if(size==1)
		return ;
	int s=(size>>1);
	if(x<posx+s&&y<posy+s)
	{
		an[posx+s-1][posy+s]=4;
		an[posx+s][posy+s-1]=4;
		an[posx+s][posy+s]=4;
		chess(s,x,y,posx,posy);
		chess(s,posx+s-1,posy+s,posx,posy+s);
		chess(s,posx+s,posy+s-1,posx+s,posy);
		chess(s,posx+s,posy+s,posx+s,posy+s);
	}
	else if(x<posx+s&&y>=posy+s)
	{
		an[posx+s-1][posy+s-1]=3;
		an[posx+s][posy+s-1]=3;
		an[posx+s][posy+s]=3;		
		chess(s,posx+s-1,posy+s-1,posx,posy);
		chess(s,x,y,posx,posy+s);
		chess(s,posx+s,posy+s-1,posx+s,posy);
		chess(s,posx+s,posy+s,posx+s,posy+s);
	}
	else if(x>=posx+s&&y<posy+s)
	{
		an[posx+s-1][posy+s-1]=2;
		an[posx+s-1][posy+s]=2;
		an[posx+s][posy+s]=2;		
		chess(s,posx+s-1,posy+s-1,posx,posy);
		chess(s,posx+s-1,posy+s,posx,posy+s);
		chess(s,x,y,posx+s,posy);
		chess(s,posx+s,posy+s,posx+s,posy+s);
	}
	else if(x>=posx+s&&y>=posy+s)
	{
		an[posx+s-1][posy+s-1]=1;
		an[posx+s-1][posy+s]=1;
		an[posx+s][posy+s-1]=1;	
		chess(s,posx+s-1,posy+s-1,posx,posy);
		chess(s,posx+s-1,posy+s,posx,posy+s);
		chess(s,posx+s,posy+s-1,posx+s,posy);
		chess(s,x,y,posx+s,posy+s);
	}
}
相关标签: 递归

上一篇:

下一篇: