矩阵中对角线交点的北、南、东、西元素

Elements north, south, east, west of the diagonal intersection within a matrix

我想知道矩阵除对角线外的 4 个主要区域的条件。

例如在下面的矩阵中

A=[1,2,3,4,5;
   6,7,8,9,10;
   11,12,13,14,15;
   16,17,18,19,20;
   21,22,23,24,25;] 

北边的元素为2,3,4,8;从西侧是 6,11,16,12;从东侧 10,15,20,14;从南侧 22,23,24,18;

我想通了,北边可以写成:

for(i=0;i<n;i++)
    for(j=i+1;j<n-i-1;j++)
        printf("%d",v[i][j])

对于其他方面,我卡住了。谁能帮帮我?

假设我们将第一个索引 i 解释为行索引,将第二个索引 j 解释为列索引。这与数学符号中通常的索引顺序一致。 C 绝不需要这样的解释,但我们必须选择一种约定来解释罗盘方向区域标签,而这种约定是很自然的。

主对角线上元素v[i][j]的索引满足i == j。向上移动矩阵(到较小的行号)会减少 i,因此主对角线上方的矩阵元素满足 i < j。同样,主对角线以下的元素满足i > j.

次对角线上的元素索引满足i == n - 1 - j(假设从零开始索引)。同样,向上移动减少i,向下移动增加它,所以这条对角线上方的元素满足i < n - 1 - j,下方的元素满足i > n - 1 - j.

四个感兴趣区域中的每一个的特征在于它是在那些对角线之上还是之下,因此每个区域的指标条件是在对角线之上或之下的相应条件的组合。例如西部地区在主对角线以下,次对角线以上,则其指标条件为i > j && i < n - 1 - j。其他地区的指标条件可依此类推

我明白了,非常感谢 John 解释了寻找上述元素的过程,感谢 Quirk 的建议。

问题中提到了北部的情况。

南部的条件是:

for(i=0;i<n;i++)
    for(j=i+1;j<n-i-1;j++)
        printf("%d ",v[n-i-1][j]);

东区代码为:

for(i=0;i<n;i++)
    for(j=i+1;j<n-i-1;j++)
        printf("%d ",v[j][n-i-1]);

西区代码为:

for(i=0;i<n;i++)
    for(j=i+1;j<n-i-1;j++)
        printf("%d ",v[j][i]);

祝大家有个美好的一天。