如何计算二维阵列中8个相邻元素的总和?

如何计算二维阵列中8个相邻元素的总和?

问题描述:

sum = matrix[i-1][j-1] + matrix[i-1][j] + matrix[i-1][j+1]
          + matrix[i][j-1] + matrix[i][j+1]
            + matrix[i+1][j-1] + matrix[i+1][j] + matrix[i+1][j+1] ;





我只知道。但我不知道怎么做。



i'm just know that . but i don't know how.

#include <stdio.h>

#define ROWS 8
#define COLS 8

typedef int matrix_t[ROWS][COLS];

static int sum(matrix_t &matrix, int row, int col)
{
    int sum = 0;
    for (int i = -1; i < 2; i++)
    {
        for (int j = -1; j < 2; j++)
        {
            // skip center cell
            if (i == j) continue;
            // skip rows out of range.
            if ( (i + row) < 0 || (i + row >= ROWS) continue;
            // skip columns out of range.
            if ( (j + col) < 0 || (j + col >= COLS) continue;
            // add to sum.
            sum += matrix[i + row][j + col];
        }
    }
    return sum;
}

static int make(matrix_t &result, const matrix_t &source)
{
    for (int i = 0; i < ROWS; i++)
        for (int j = 0; j < COLS; j++)
            result[i][j] = sum(source, i, j);
}

// print a matrix to stdout.
static int print(const matrix_t &source)
{
    for (int i = 0; i < ROWS; i++)
    {
        for (int j = 0; j < COLS; j++)
            printf("\t%d", source[i][j]);
        printf("\n");
    }
}

// unit test
int main(int argc, char *argv[])
{
    matrix_t result = {0};
    const matrix_t source =
    {
        {1, 2, 3, 4, 5, 6, 7, 8},
        {1, 2, 3, 4, 5, 6, 7, 8},
        {1, 2, 3, 4, 5, 6, 7, 8},
        {1, 2, 3, 4, 5, 6, 7, 8},
        {1, 2, 3, 4, 5, 6, 7, 8},
        {1, 2, 3, 4, 5, 6, 7, 8},
        {1, 2, 3, 4, 5, 6, 7, 8},
        {1, 2, 3, 4, 5, 6, 7, 8}
    };
    make(result, source);
    puts("Source:");
    print(source);
    puts("Result:");
    print(result);
    return 0;
}
</stdio.h>