首页 > 解决方案 > 遍历矩阵中的所有主要对角线,包括主对角线

问题描述

如何遍历矩阵中的所有对角线?有类似的问题,比如这个,但他们只是计算总和。我需要通过所有对角线执行某些操作,而不仅仅是求和。为了清楚起见,我需要像图片中那样遍历它:

解释

我想出了这个解决方案,但它很糟糕:

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,我首先从主对角线向右遍历每个对角线,然后从主对角线向左遍历,但这个解决方案对我来说似乎很难看。

标签: algorithmmatrix

解决方案


您可以以模运算为代价使用更简单的迭代:

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

推荐阅读