Извлечение и хранение элементов (в зависимости от условий) из массива

Учитывая массив из 81 элементов (предназначенных для представления сетки 9x9), как я могу перейти каждый элемент, захватив три вокруг него, а затем выполнение операции на них, а затем продолжается в ближайшие три строки, столбец, или submatrix. Посмотрите ниже или на сетке судоку, чтобы увидеть макет.


define COL(n)      ((n) % 9)
define ROW(n)      ((n) / 9)
define SUB(n)      ((n / 3) % 9)

Например, у меня есть


int grid[81];

и


int array_x[9], array_y[9], array_s[9];

Поскольку общая сетка 9x9 может быть разделена на 9 из следующих категорий, Есть девять элементов в каждом массиве, и я надеюсь взять элементы каждой колонны (оси х) в группах по три, выполнять


r = ((a = ~a) & (b = ~b)) | ((b | a) & ~c);

// or

r = ((~a & ~b)) | ((~b | ~a) & ~c);

на них, взять три номера результата, и выполнять его на них, и хранить его в массиве, то в массив.

Если это звучит невозможно, извините, я хотел бы другой способ сделать это. Определенно открыты для предложений ...

Ответ на: "Извлечение и хранение элементов (в зависимости от условий) из массива"

Количество ответов:2

Еще одна попытка:

void applyThingy(int *grid, int xPitch, int yPitch)
{
    int row, column;
    int *rowPointer = grid;

    for(row = 0; row < 3; ++row)
    {
        int *columnPointer = rowPointer;

        for(column = 0; column < 3; ++column)
        {
            doOperation(columnPointer);
            columnPointer += xPitch;
        }

        rowPointer += yPitch * 9;
    }
}

applyThingy(&grid[SUB(n)], 1, 1); // Perform on 3x3 subgrid
applyThingy(&grid[ROW(n)], 1, 0); // Perform on row
applyThingy(&grid[COL(n)], 0, 1); // Perform on column

Я не уверен, что вы хотите сделать, но это что-то вроде этого?:

#define IDX(row, col) ((row)*9+(col))

int m = some_column;
for (int n = 0; n < 9; n += 3) {
  a = grid[IDX(n, m)];
  b = grid[IDX(n+1, m)];
  c = grid[IDX(n+2, m)];
  r = ...;
  ...
}

Кроме того, я не уверен, что вы хотите сделать с вашей операции

r = ((a = ~a) & (b = ~b)) | ((b | a) & ~c);

Вы назначаете ~a to на a, is that what you want? How is , это то, что вы хотите? Как определяется a defined, and what are you trying to set it to? What are you trying to achieve? и на что вы его пытаетесь установить? Чего вы пытаетесь достичь?