#include<stdio.h>
int amount = 0 , Board[100][100];
void Cover(int tr , int tc , int dr ,int dc ,int size );
void OutputBoard(int size);
int main(void)
{
int size = 1, x ,y,i,j,k;
scanf("%d",&k);
for( i = 1 ; i <= k ; i++)
{
size = size*2;
}
printf("input incomplete pane :");
scanf("%d",&x);
scanf("%d",&y);
Cover(0 , 0 ,x ,y ,size);
OutputBoard(size);
return 0;
}
void Cover(int tr , int tc , int dr ,int dc ,int size )
{
int s ,t ;
if(size < 2) return ;
amount = amount +1;
t = amount;
s = size/2;
if( (dr < tr+s) && (dc < tc+s) )
{
Cover(tr , tc , dr , dc ,s);
Board[tr+s-1][tc+s] =t;
Board[tr+s][tc+s-1] =t;
Board[tr+s][tc+s] =t;
Cover(tr , tc+s , tr+s-1 , tc+s ,s);
Cover(tr+s , tc , tr+s , tc+s-1 ,s);
Cover(tr+s , tc+s , tr+s , tc+s ,s);
}
else if((dr < tr+s) && (dc >= tc+s))
{
Cover(tr , tc+s , dr , dc ,s);
Board[tr+s-1][tc+s-1] =t;
Board[tr+s][tc+s-1] =t;
Board[tr+s][tc+s] =t;
Cover(tr , tc , tr+s-1 , tc+s-1 ,s);
Cover(tr+s , tc , tr+s , tc+s-1 ,s);
Cover(tr+s , tc+s , tr+s , tc+s ,s);
}
else if((dr >= tr+s) && (dc < tc+s))
{
Cover(tr+s , tc , dr , dc ,s);
Board[tr+s-1][tc+s-1] =t;
Board[tr+s-1][tc+s] =t;
Board[tr+s][tc+s] =t;
Cover(tr , tc , tr+s-1 , tc+s-1 ,s);
Cover(tr , tc+s , tr+s-1 , tc+s ,s);
Cover(tr+s , tc+s , tr+s , tc+s ,s);
}
else if((dr >= tr+s) && (dc >= tc+s))
{
Cover(tr+s , tc+s , dr , dc ,s);
Board[tr+s-1][tc+s-1] =t;
Board[tr+s-1][tc+s] =t;
Board[tr+s][tc+s-1] =t;
Cover(tr , tc , tr+s-1 , tc+s-1 ,s);
Cover(tr , tc+s , tr+s-1 , tc+s ,s);
Cover(tr+s , tc , tr+s , tc+s-1 ,s);
}
}
void OutputBoard(int size)
{
for(int i = 0 ; i < size ; i++)
{
for(int j = 0 ; j < size ; j++)
{
printf("%d\t",Board[i][j]);
}
printf("\n");
}
printf("\n");
}
棋盘覆盖问题 算法
最新推荐文章于 2024-04-27 23:19:08 发布