سؤال

ونظرا مجموعة من 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);

وعليهم، واتخاذ الأرقام الناتجة الثلاثة، وتنفيذ ذلك عليهم، ومن ثم تخزينه في مجموعة.

وإذا كان هذا يبدو مستحيلا، آسف، أود طريقة مختلفة للقيام بذلك. مفتوحة بالتأكيد لاقتراحات ...

هل كانت مفيدة؟

المحلول

ومحاولة أخرى:

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 إلى a، هو أن ما تريد؟ كيف يتم a محددة، وما تحاول أن تعيينه ل؟ ماذا تحاول تحقيقه؟

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top