1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63
| #include<stdio.h>
int matrix[100][100]={0}; int t=0;
void chessboard(int tr,int tc,int dr,int dc,int size);
int main(){ int size; int dr,dc; int i,j; scanf("%d",&size); scanf("%d %d",&dr,&dc); chessboard(0,0,dr,dc,size); for(i=0;i<size;i++){ for(j=0;j<size;j++){ printf("%2d ",matrix[i][j]); } printf("\n"); } return 0; }
void chessboard(int tr,int tc,int dr,int dc,int size){ if(size==1)return; int s=size/2; int cnt; cnt=t+1; t++; if(dr<tr+s&&dc<tc+s){ chessboard(tr,tc,dr,dc,s); } else { matrix[tr+s-1][tc+s-1]=cnt; chessboard(tr,tc,tr+s-1,tc+s-1,s); } if(dr<tr+s&&dc>=tc+s){ chessboard(tr,tc+s,dr,dc,s); } else { matrix[tr+s-1][tc+s]=cnt; chessboard(tr,tc+s,tr+s-1,tc+s,s); } if(dr>=tr+s&&dc<tc+s){ chessboard(tr+s,tc,dr,dc,s); } else { matrix[tr+s][tc+s-1]=cnt; chessboard(tr+s,tc,tr+s,tc+s-1,s); } if(dr>=tr+s&&dc>=tc+s){ chessboard(tr+s,tc+s,dr,dc,s); } else { matrix[tr+s][tc+s]=cnt; chessboard(tr+s,tc+s,tr+s,tc+s,s); } }
|