棋盘覆盖

时间:2008-05-04 19:07:17   来源:   作者:

中国教程网 )原创: http://www.cnjiaocheng.com

#include "c1.h"
int a[32][32]={0};
int tile=2;
int count=0;
void main()
{
 void chessboard(int tr,int tc,int dr,int dc,int size,int p);
 printf("input a number <1-4>:");
 int n;
 scanf("%d",&n);
 int p=1;
 for(int k=0;k<n;k++){
  p=p*2;
 }
 printf("请输入特殊坐标的位置:<i,j>\n");
 int c,b;
 scanf("%d%d",&b,&c);
 /*特殊坐标的初始值定为1*/
 a[b][c]=1;
 int tr=0;
 int tc=0;
 int dr=b; http://www.cnjiaocheng.com
 int dc=c;
 int size=p;
 chessboard(tr,tc,dr,dc,size,p);
}
来源中国教程网

void chessboard(int tr,int tc,int dr,int dc,int size,int p)
{
 if(size==1){
  /*打印*/
  count++;
  if(count==p*p){
  printf("icon ");
  for(int s=0;s<p;s++)
  {
   printf("<%2d>",s);
  }
  printf("\n");
  for(int i=0;i<p;i++)
  {
   for(int j=0;j<p;j++)
   {
    if(j==0)
    {
     printf("<%2d>",i);
    }
    printf("%4d",a[i][j]);
   }
   printf("\n");
  }
  }
  return;
 }
 int t=tile++;
 int s=size/2;
 
  来源中国教程网
 //左上角
 if(dr<(tr+s)&&dc<(tc+s))
  //特殊方格在这个区域里
  chessboard(tr,tc,dr,dc,s,p);
 else{
  //用t覆盖右下角
  a[tr+s-1][tc+s-1]=t;
  //以这个点为特殊点覆盖该区域的其它点
  chessboard(tr,tc,tr+s-1,tc+s-1,s,p);
 }
来源中国教程网

 //右上角
 if(dr<(tr+s)&&dc>=(tc+s))
  chessboard(tr,tc+s,dr,dc,s,p);
 else{
  a[tr+s-1][tc+s]=t;
  chessboard(tr,tc+s,tr+s-1,tc+s,s,p);
 }
http://www.cnjiaocheng.com

 //左下角
 if(dr>=(tr+s)&&dc<(tc+s))
  chessboard(tr+s,tc,dr,dc,s,p);
 else{
  a[tr+s][tc+s-1]=t;
  chessboard(tr+s,tc,tr+s,tc+s-1,s,p);
 }

http://www.cnjiaocheng.com

 //右下角
 if(dr>=(tr+s)&&dc>=(tc+s))
  chessboard(tr+s,tc+s,dr,dc,s,p);
 else{
  a[tr+s][tc+s]=t;
  chessboard(tr+s,tc+s,tr+s,tc+s,s,p);
 }
}
来源中国教程网


上一篇:没有了   下一篇:电文保密

相关文章