这是别人写的,可我的编译器变量必须在函数最前面定义啊 #include <stdio.h> int tile = 1;//全局变量 骨牌编号 int Board[4][4];//棋盘 void ChessBoard(int tr,int tc,int dr,int dc,int size); int main() { int i,j; for(i=0; i<4; i++) { for( j=0; j<4; j++) { Board[i][j] = 0; } } ChessBoard(0,0,2,3,4); for( i=0; i<4; i++) { for( j=0; j<4; j++) { printf("%d", Board[i][j]); } printf("\n"); } } /** * tr : 棋盘左上角的行号,tc棋盘左上角的列号 * dr : 特殊方格左上角的行号,dc特殊方格左上角的列号 * size :size = 2^k 棋盘规格为2^k*2^k */ void ChessBoard(int tr,int tc,int dr,int dc,int size) { if(size == 1) { return; } int t = tile++;//L型骨牌编号 int s = size/2;//分割棋盘 //覆盖左上角子棋盘 if(dr<tr+s && dc<tc+s)//特殊方格在此棋盘中 { ChessBoard(tr,tc,dr,dc,s); } else//特殊方格不在此棋盘中 { //用编号为t的骨牌覆盖右下角 Board[tr+s-1][tc+s-1] = t; //覆盖其余方格 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//特殊方格不在此棋盘中 { //用编号为t的骨牌覆盖左下角 Board[tr+s-1][tc+s] = t; //覆盖其余方格 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//特殊方格不在此棋盘中 { //用编号为t的骨牌覆盖右上角 Board[tr+s][tc+s-1] = t; //覆盖其余方格 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//特殊方格不在此棋盘中 { //用编号为t的骨牌覆盖左上角 Board[tr+s][tc+s] = t; //覆盖其余方格 ChessBoard(tr+s,tc+s,tr+s,tc+s,s); } } int t = tile++;//L型骨牌编号 int s = size/2;//分割棋盘 这两句我调到前面去就错了
点赞 评论

相关推荐

11-05 07:29
贵州大学 Java
点赞 评论 收藏
分享
牛客网
牛客企业服务