c++ - 如何检查矩阵中每一行/列的相等性?

标签 c++ matrix

我有一个 char Board[3][3] 矩阵。我正在尝试检查每行/列中的元素是否相等。 IE。 Board[0][0] == Board[0][1] == Board[0][2],其他行和列依此类推。

这是为了检查井字游戏的胜利,所以很明显,写出所有可能的组合是非常“低效”的。

有没有更短的方法来做到这一点?

最佳答案

编写一个辅助函数来检查特定行上的三个项目是否彼此相等。一条线可以由板边缘的 (row, col) 位置和定义“step”的一对“deltas”(dr, dc) 定义我们需要前往特定线路上的下一个方 block :

bool check(char b[3][3], int row, int col, int dr, int dc) {
    return b[row][col] == b[row+dr][col+dc]
        && b[row][col] == b[row+2*dr][col+2*dc];
}

要检查棋盘上是否有胜利,您可以检查所有八条获胜线:

bool hasWin = check(0, 0, 0, 1) // First horizontal line
           || check(1, 0, 0, 1) // Second horizontal line
           || check(2, 0, 0, 1) // Third horizontal line
           || check(0, 0, 1, 0) // First vertical line
           || check(0, 1, 1, 0) // Second vertical line
           || check(0, 2, 1, 0) // Third vertical line
           || check(0, 0, 1, 1) // First diagonal
           || check(0, 2, 1, -1); // Second diagonal

关于c++ - 如何检查矩阵中每一行/列的相等性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29805419/

相关文章:

matrix - math.net 矩阵并置

c++ - Eclipse C++ 构建错误 : no such file or directory

c++ - 显式调用括号前的表达式必须具有(指向)函数类型

c++ - C++ 二叉树类需要什么

c++ - 如何在后台窗口中移动鼠标?

C++:循环在控制语句之后表现不同

c - 创建一个二维数组,用户给出数组的大小 (n*n),并且数组用随机数 [1-10] 填充,无需 malloc

c - 类型参数与我的程序中的其他参数不兼容

java - 从矩阵中获得最高总和的最佳方法(使用 Java 但算法是这里的问题)

matlab删除矩阵计算中的for循环