cBlog

Tips for you.

C言語で2次元配列(行列)を斜めに走査する

スポンサーリンク
※当ブログのAmazon、iTunes、サウンドハウス等のリンクはアフィリエイトを利用しています。

主対角線に平行な成分は行番号と列番号の差が一定、反対角線に平行な成分は行番号と列番号の和が一定なことを利用する。

#include <stdio.h>

int main(void) {
    int N = 3;
    int i, j;

    for (i = -(N - 1); i <= N - 1; i++) {  // 行番号と列番号の差
        for (j = 0; j < N; j++) {          // 列番号
            if (0 <= i + j && i + j < N) {
                printf(" %d,%d", i + j, j);
            }
        }
        printf("\n");
    }

    printf("\n");

    for (i = 0; i <= 2 * (N - 1); i++) {  // 行番号と列番号の和
        for (j = 0; j < N; j++) {         // 列番号
            if (0 <= i - j && i - j < N) {
                printf(" %d,%d", i - j, j);
            }
        }
        printf("\n");
    }
}

実行結果

0,2
0,1 1,2
0,0 1,1 2,2
1,0 2,1
2,0

0,0
1,0 0,1
2,0 1,1 0,2
2,1 1,2
2,2