Хороший способ перебора 2D-крестики-нолики в C ++?

У меня есть функция для проверки, если массив имеет три одинаковых символа для массива крестики-нолики. Проблема в том, что у меня проблема с логикой:

for (int i = 0; i < SIZE; i++){
for (int j = 0; j < SIZE; j++){
if (board[i][j] != '*'){
if (i != j){
if (board[i][i] == board[i][j]){
matches++;
}
else if (board[i][j] == board[j][i]){
matches++;
}
else if (board[i][j] == board[j][j]){
matches++;
}
else if (board[i][j] == board[j][i]){
matches++;
}
else {
matches = 0;
}
}
}
}
}

Кажется, что я могу проверить по горизонтали и вертикали на совпадения. Но я не могу понять, как найти диагональные соответствия. Я думал, что этот код будет работать, а пока нет.

Любые предложения о том, что не так?

1

Решение

Похоже на домашнее задание, поэтому я не буду давать решение кода. Но вы можете сказать, когда вы находитесь на диагонали, когда оба индекса равны (i == j) или когда индексы складываются на единицу меньше, чем размерность матрицы (i + j == SIZE - 1.)

В первом случае вы находитесь на первой диагонали (слева направо и снизу справа). Во втором случае вы находитесь на второй диагонали (справа налево внизу).

Это работает для квадратных матриц любого размера.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]