Извлекать и хранить элементы (согласно условиям) из массива - PullRequest
1 голос
/ 13 марта 2009

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

<code>
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 из следующих категорий, в каждом массиве есть девять элементов, и я надеюсь взять элементы каждого столбца (ось x) в группы по три, выполнить


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

// or

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

на них возьмите три результирующих числа и выполните их на них, а затем сохраните в массиве.

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

Ответы [ 2 ]

1 голос
/ 13 марта 2009

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

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
0 голосов
/ 13 марта 2009

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

#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 на a, это то, что вы хотите? Как определяется a, и что вы пытаетесь установить? Чего ты пытаешься достичь?

...