怎么样做一个自己的网站,遵义软件制作平台,仪征网站建设公司,网站开发属于什么资产一、 问题描述 二、算法思想 首先#xff0c;将2^k 2^k的棋盘划分为四个相等大小的子棋盘#xff0c;定义为左上、左下、右上和右下四个子棋盘。 然后#xff0c;根据残缺格的坐标#xff0c;确定其中一个子棋盘是不完整的#xff0c;即残缺子棋盘。假设残缺子棋盘是左…一、 问题描述 二、算法思想 首先将2^k × 2^k的棋盘划分为四个相等大小的子棋盘定义为左上、左下、右上和右下四个子棋盘。 然后根据残缺格的坐标确定其中一个子棋盘是不完整的即残缺子棋盘。假设残缺子棋盘是左上子棋盘。 接下来分以下三种情况进行处理 当k1时即棋盘大小为2×2时直接填充序号即可。 当残缺子棋盘的坐标位于左上子棋盘的右下角时将左上子棋盘的右下角作为残缺格其余三个子棋盘按照相同的规则进行处理。 当残缺子棋盘的坐标位于左上子棋盘的其他位置时将左上子棋盘的右下角、右上子棋盘的左下角和左下子棋盘的右上角作为三个残缺格其余三个子棋盘按照相同的规则进行处理。 递归地对每个子棋盘进行相同的处理直到棋盘大小为2×2时再直接填充序号。 具体实现时可以使用递归函数来处理函数的输入参数为棋盘大小和残缺格的坐标输出为填充好序号的棋盘。 三、代码实现
#includestdio.h
#includemath.h
void TileBoard(int tr,int tc,int dr,int dc,int size);
void OutputBoard(int size);
int tile1;
int Board[1025][1025];
int main()
{int n,a,b;scanf(%d,n);int sum;sumpow(2,n);scanf(%d %d,a,b);Board[n][n]0;TileBoard(0,0,a,b,sum);OutputBoard(sum);return 0;
}
void TileBoard(int tr,int tc,int dr,int dc,int size)
{if(size1) return;int ttile,ssize/2;if(drtrsdctcs)TileBoard(tr,tc,dr,dc,s);else{Board[trs-1][tcs-1]t;TileBoard(tr,tc,trs-1,tcs-1,s);}if(drtrsdctcs)
TileBoard(tr,tcs,dr,dc,s);else {Board[trs-1][tcs]t;TileBoard(tr,tcs,trs-1,tcs,s);}if(drtrsdctcs)TileBoard(trs,tc,dr,dc,s);else{ Board[trs][tcs-1]t;TileBoard(trs,tc,trs,tcs-1,s);}if(drtrsdctcs)
TileBoard(trs,tcs,dr,dc,s);else {Board[trs][tcs]t;TileBoard(trs,tcs,trs,tcs,s);}
}void OutputBoard(int size){for(int i0;isize;i){for(int j0;jsize;j){printf(%-3d,Board[i][j]);}printf(\n);}printf(end);}
执行结果 结语 想多了都是问题 做多了都是答案