对角条中的横向矩形矩阵

时间:2010-01-21 20:55:41

标签: matrix traversal

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

感谢。

1 个答案:

答案 0 :(得分:22)

我记得写过这个。我认为对于一个矩形矩阵,你需要做一些小改动,还有一行难以理解的废话:

#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;
}

输出:

Slice 0: 1
Slice 1: 5 2
Slice 2: 9 6 3
Slice 3: 10 7 4
Slice 4: 11 8
Slice 5: 12

为了简要说明它是如何工作的,每个切片都是从第一列开始的对角线,沿对角线向右上方并在第一行结束(最初左下角,但现在由于海报的评论而交换)。

z2表示在打印第一个数字之前必须跳过多少项。对于前m个切片,这是零,然后对于每个剩余切片增加一个。 z1是最后应跳过多少项,再从前m个切片开始为零,对剩余切片再增加一个。