一、问题背景与程序功能
我们有一个 m 行 n 列的棋盘,目标是在棋盘上放置多米诺骨牌(每个多米诺骨牌占据两个
相邻的方格),计算出所有可能的放置方案数。程序通过递归的方式遍历棋盘的每个方格,尝试放置多米诺骨牌,并在满足条件的情况下继续探索下一个方格,最终统计出所有可行的放置方案数量。
二、代码详细解析
(一)全局变量声明
int m,n; // 长宽
bool **Chess; // 棋盘
int Count=0; // 计数
这里定义了表示棋盘行数 m 和列数 n 的变量,一个二维布尔指针 Chess 用于表示棋盘的状态( true 表示已放置多米诺骨牌, false 表示未放置),以及一个用于计数的变量 Count ,它将记录总的放置方案数。
(二)Dominous函数——核心递归逻辑
void Domino(int i,int j){
if(i==m){Count++;return;} // 完成
当递归到最后一行( i == m )时,说明已经成功地放置完了所有行的多米诺骨牌,此时将方案数 Count 加 1,并返回。
if(j==n-1){ // 当前方格位于最后一列
if(Chess[i][j]==0){ // 尚未放置
if(i!=m-1&&Chess[i+1][j]==0){ //


1692

被折叠的 条评论
为什么被折叠?



