Matrix 对角条中的遍历矩形矩阵

Matrix 对角条中的遍历矩形矩阵,matrix,traversal,Matrix,Traversal,我需要做同样的事情,但要处理任何矩阵,而不仅仅是正方形矩阵。此外,遍历的方向需要相反。我试图编辑我在那里找到的代码,但无法理解 谢谢。我记得写过这封信。我认为对于一个矩形矩阵,你需要一些小的改变和一行不可理解的废话: #include <stdio.h> int main() { int x[3][4] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 1

我需要做同样的事情,但要处理任何矩阵,而不仅仅是正方形矩阵。此外,遍历的方向需要相反。我试图编辑我在那里找到的代码,但无法理解


谢谢。

我记得写过这封信。我认为对于一个矩形矩阵,你需要一些小的改变和一行不可理解的废话:

#include <stdio.h>

int main()
{
    int x[3][4] = { 1,  2,  3,  4,
                    5,  6,  7,  8,
                    9, 10, 11, 12};
    int m = 3;
    int n = 4;
    for (int slice = 0; slice < m + n - 1; ++slice) {
        printf("Slice %d: ", slice);
        int z1 = slice < n ? 0 : slice - n + 1;
        int z2 = slice < m ? 0 : slice - m + 1;
        for (int j = slice - z2; j >= z1; --j) {
                printf("%d ", x[j][slice - j]);
        }
        printf("\n");
    }
    return 0;
}
为了简单地解释它的工作原理,每个片段都是一条对角线,从第一列开始,向右斜向上,最后到第一行(最初是左下,但现在由于海报上的评论而交换)


z2表示在打印第一个数字之前必须跳过多少项。第一个m个切片的值为零,然后每个剩余切片的值增加一。z1是应该在末尾跳过的项目数,对于第一个m个切片,再次从零开始,对于其余切片,增加1。

是的,这就是我想要的。但是我实际需要的是在反对角线带中遍历矩形矩阵。:)我试着把你给出的答案中的索引换成平方矩阵,我想我可以在这里应用同样的原理——只是交换索引,得到反对角遍历。然而,对于矩形矩阵,它将不起作用。那么,我现在应该再问一个关于反对角矩形遍历的问题吗???谢谢你的回答:)我不太清楚你说的反对角线是什么意思。更新你的问题会有帮助。我认为您需要做的是在读取数组值时翻转y坐标,但保持x不变,即
x[m-j-1][slice-j]
而不是
x[j][slice-j]
。这就给出了[9]、[10,5]、[11,6,1]等。。。这就是你想要的吗?对不起,我又错了。。。我不是很精确。不,我需要相同的遍历,但不是像[1]、[2,5]、[3,6,9]那样遍历,而是像[1]、[5,2]、[9,6,3]那样遍历。再次感谢。好的,很简单:只需颠倒for循环中的迭代顺序。我已经更新了我的答案。我想这就是你现在想要的。为了完成这个答案,你将如何遍历逆对角线?
Slice 0: 1
Slice 1: 5 2
Slice 2: 9 6 3
Slice 3: 10 7 4
Slice 4: 11 8
Slice 5: 12