|
#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); } } 来源中国教程网
|