棋盘覆盖
三.棋盘覆盖的具体实现代码
1 #include <stdio.h> 2 #include <stdlib.h> 3 4 int num = 0; 5 int Matrix[100][100]; 6 void chessBoard(int tr, int tc, int dr, int dc, int size); 7 int main() 8 { 9 int size,r,c,row,col; 10 printf("请输入棋盘的行列号"); 11 scanf("%d",&size); 12 printf("请输入特殊方格的行列号"); 13 scanf("%d %d",&row,&col); 14 chessBoard(0,0,row,col,size); 15 16 for (r = 0; r < size; r++) 17 { 18 for (c = 0; c < size; c++) 19 { 20 printf("%2d ",Matrix[r][c]); 21 } 22 printf("\n"); 23 } 24 25 return 0; 26 } 27 28 void chessBoard(int tr, int tc, int dr, int dc, int size) 29 { 30 31 int s,t; 32 if (size==1) return; 33 s = size/2; //分割棋盘 34 t = ++num; //L型骨牌号 35 if (dr < tr + s && dc < tc +s) //覆盖左上角子棋盘 36 { 37 //特殊方格在此棋盘中 38 chessBoard(tr,tc,dr,dc,s); 39 } 40 else //此棋盘中无特殊方格 41 { 42 //用t号L型骨牌覆盖右下角 43 Matrix[tr+s-1][tc+s-1] = t; 44 //覆盖其余方格 45 chessBoard(tr,tc,tr+s-1,tc+s-1,s); 46 } 47 //覆盖右上角子棋盘 48 if (dr < tr + s && dc >= tc + s ) // 49 { 50 //特殊方格在此棋盘中 51 chessBoard(tr,tc+s,dr,dc,s); 52 } 53 else //此棋盘中无特殊方格 54 { 55 //用t号L型骨牌覆盖左下角 56 Matrix[tr+s-1][tc+s] = t; 57 //覆盖其余方格 58 chessBoard(tr,tc+s,tr+s-1,tc+s,s); 59 } 60 //覆盖左下角子棋盘 61 if (dr >= tr + s && dc < tc + s) 62 { 63 //特殊方格在此棋盘中 64 chessBoard(tr+s,tc,dr,dc,s); 65 } 66 else 67 { 68 //用t号L型骨牌覆盖右上角 69 Matrix[tr+s][tc+s-1] = t; 70 //覆盖其余方格 71 chessBoard(tr+s,tc,tr+s,tc+s-1,s); 72 } 73 //覆盖右下角子棋盘 74 if (dr >= tr + s && dc >= tc + s) 75 { 76 //特殊方格在此棋盘中 77 chessBoard(tr+s,tc+s,dr,dc,s); 78 } 79 else 80 { 81 //用t号L型骨牌覆盖左上角 82 Matrix[tr+s][tc+s] = t; 83 //覆盖其余方格 84 chessBoard(tr+s,tc+s,tr+s,tc+s,s); 85 } 86 87 }
喜欢阳光,更喜欢你~

浙公网安备 33010602011771号