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

时间:2015-04-22 17:55:25

标签: c++ matrix

我有一个char Board[3][3]矩阵。我试图检查每行/列中的元素是否相等。即。 Board[0][0] == Board[0][1] == Board[0][2],等等其他行和列。

这是为了检查井字游戏中的胜利,所以显然,编写所有可能的组合非常低效。

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

2 个答案:

答案 0 :(得分:5)

编写辅助函数以检查特定行上的三个项是否彼此相等。一条线可以通过板边缘的(row, col)位置和一对"增量"来定义。 (dr, dc)定义"步骤"我们需要走到特定线的下一个广场:

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

答案 1 :(得分:0)

某种意义上的东西

i = 1;
while(i<Board_size && Board[0][i-1] == Board[0][i])
{
    i++;
}
if (i<Board_size) not equal;

也不是很有效,但很简单。

编辑,整个董事会:

int i;
for (int j=0;j<Board_size;j++)
{
    i = 1;
    while(i<Board_size && Board[j][i-1] == Board[j][i])
    {
        i++;
    }
    if (i<Board_size) line j not equal;

    i = 1;
    while(i<Board_size && Board[i-1][j] == Board[i][j])
    {
        i++;
    }
    if (i<Board_size) column j not equal;
}