一尘不染

对角带中的导线矩阵

algorithm

我以为这个问题有一个简单的解决方案,几个for循环和一些奇特的计数器,但显然它要复杂得多。

所以我的问题是,您将如何在C中编写对角带状方阵的函数遍历。

例:

1  2  3
4  5  6
7  8  9

必须按照以下顺序遍历:

[1],[2,4],[3,5,7],[6,8],[9]

上面的每个带都用方括号括起来。要求之一是能够区分条带。这意味着您知道何时开始新的剥离。这是因为还有一个函数,我必须为试条中的每个项目然后在新试条的开始之前调用该函数。因此,没有代码重复的解决方案是理想的。


阅读 191

收藏
2020-07-28

共1个答案

一尘不染

这是您可以使用的东西。只需将printfs替换为您实际想要执行的操作即可。

#include <stdio.h>

int main()
{
    int x[3][3] = {1, 2, 3,
                   4, 5, 6,
                   7, 8, 9};
    int n = 3;
    for (int slice = 0; slice < 2 * n - 1; ++slice) {
        printf("Slice %d: ", slice);
        int z = (slice < n) ? 0 : slice - n + 1;
        for (int j = z; j <= slice - z; ++j) {
            printf("%d ", x[j][slice - j]);
        }
        printf("\n");
    }
    return 0;
}

输出:

Slice 0: 1
Slice 1: 2 4
Slice 2: 3 5 7
Slice 3: 6 8
Slice 4: 9
2020-07-28