Go через все основные диагонали в матрице, включая главную - PullRequest
0 голосов
/ 10 января 2020

Как мне go пройти через все диагонали в матрице? Были похожие вопросы, например этот один, но они просто подсчитали сумму. Мне нужно выполнять определенные операции, проходящие через все диагонали, а не просто суммировать. Чтобы было ясно, мне нужно пройти через это так, как на картинке:

Explanation

Я придумала это решение, но оно Ужасно:

for(int j = 0; j < m; j++) {
        for(int i = 0; i < n && i + j < m; i++) {
            cout << matrix[i][i + j] << " ";
        }
        cout << endl;
    }
for(int i = 1; i < n; i++) {
        for(int j = 0; j < m && i + j < n; j++) {
            cout << matrix[j + i][j] << " ";
        }
        cout << endl;
    }

Для матрицы n * m я сначала go проходит через каждую диагональ справа от основной, а затем слева от главной, но мне это решение кажется некрасивым.

Ответы [ 2 ]

1 голос
/ 10 января 2020

Вам нужен первый l oop, чтобы найти начальную точку каждой диагонали, и второй l oop, чтобы следовать за диагональю.

Вот псевдокод, предполагающий точку (0 , 0) является нижним.

(i_start, j_start) = (1, 0)
While (1)
    If (i_start, j_start) out of bound: break
    (i, j) = (i_start, j_start)
    While (1)
         If (i, j) out of bound: break
         Write matrix[i][j]
         i--, j++
    End while
    If (i_start not max) i_start++
    Else j_start++
End while
1 голос
/ 10 января 2020

Вы можете использовать более простую итерацию за счет операции по модулю:

for (int i = 0; i < n; i++) {
    for (int j = 0; j < m; j++) {
        cout << a[(i+j)%n][j] << " ";
    }
    cout << endl;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...