我有一个char Board[3][3]
矩阵。我试图检查每行/列中的元素是否相等。即。 Board[0][0] == Board[0][1] == Board[0][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;
}