我有一个 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/