matrix - 在对角线条中遍历矩形矩阵

标签 matrix traversal

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

谢谢。

最佳答案

我记得是这么写的。我认为对于矩形矩阵,您需要进行一些小的更改和一行难以理解的废话:

#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 个切片为零,然后对于每个剩余的切片增加 1。 z1 是最后应该跳过多少个项目,对于前 m 个切片再次从 0 开始,并为剩余的切片增加 1。

关于matrix - 在对角线条中遍历矩形矩阵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2112832/

相关文章:

c++ - 查找二维矩阵是否是另一个二维矩阵的子集

matlab - 遍历矩阵列的最佳方法是什么?

c - 为什么在 C 中向后迭代数组比向前迭代快

java - 无法从链表中删除元素?

php - 基于对象的父=>子关系构建访问矩阵?

opengl - 将 Z 轴与矢量对齐的最简单方法是什么?

r - 从矩阵中提取后访问丢失的列名称

arrays - 使用偏移量链接数组的元素

algorithm - 如何计算预序树数组中节点的深度?

javascript - 如何遍历 HTML