Итерировать по разным диагоналям в матрице и устанавливать ее начальную и конечную точки в C? - PullRequest
0 голосов
/ 07 июня 2019

Я пытаюсь создать функцию, которая перебирает диагональ в шахматоподобной игре и возвращает значение, если какая-либо из позиций не пуста.Код ниже предназначен для горизонтальных перемещений.Я просто не знаю, как перевести это для диагональных движений.

Я полагаю, что приращения для [r] и [c] должны происходить одновременно, чтобы они двигались по диагонали.Как я могу это сделать?

int checkHorizontal(int fromr, int fromc, int toc){
    if (fromc < toc){
        for(int c = fromc + 1; c < toc; c++){
            if ((tablero[fromr][c]) != &empty){
                return 0;
            }
        }
    }
    else if (fromc > toc){
        for(int c = toc + 1; c < fromc; c++){
            if ((tablero[fromr][c]) != &empty){
                return 0;
            }
        }
    }
    return 1;
}

Я ожидаю, что функция вернет 0, если один из пробелов не пуст, и 1, если все они были пустыми.

Ответы [ 3 ]

0 голосов
/ 07 июня 2019

Вы можете сделать что-то вроде

for (int c = fromc + 1, r = fromr + 1; c < toc; c++, r++) {
    do_stuff_with(tablero[r][c])
}

для увеличения двух переменных вместе.

Конечно, вы также можете сделать c++, r-- для перемещения координат в разных направлениях.

0 голосов
/ 07 июня 2019

При диагонали x и y либо увеличивается, либо уменьшается на 1.

Таким образом, с определенной точки [x, y] существует 4 различных направления: x++ / y++, x++ / y--, x-- / y++ или x-- / y--.

Увеличивайте во всех вышеуказанных 4 направлениях, пока не нажмете 0 или N - 1 (N размер массива).

0 голосов
/ 07 июня 2019

левая диагональ может быть проиндексирована следующим образом:

Matrix[i][i]

, где i начинается с 0 до ((размер матрицы) -1) и увеличивается на единицу каждый цикл

правая диагональ может быть проиндексирована следующим образом:

Matrix[j][i]

, где i начинается с 0 и увеличивается на единицу каждый цикл, а j начинается с (matrix-1) и уменьшается на по одному на каждую петлю.


Примечание : это индексирование только для квадратной матрицы

...