1

81 個の要素 (9x9 グリッドを表すことを意味する) の配列が与えられた場合、どのように各要素を調べて、その周囲の 3 つを取得し、それらに対して操作を実行してから、各行、列、またはサブマトリックスの次の 3 つに進むことができますか。下または数独グリッドを見て、レイアウトを確認します。


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 つに分割できるため、各配列には 9 つの要素があり、各列 (x 軸) の要素を 3 つのグループに分けて実行したいと考えています。


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

// or

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

それらに対して、結果の 3 つの数値を取得し、それらに対して実行してから、配列に格納します。

これが不可能に聞こえる場合は、申し訳ありませんが、これを行う別の方法が必要です。間違いなく提案を受け入れます...

4

2 に答える 2

1

別の試み:

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
于 2009-03-13T01:00:36.573 に答える
0

あなたが何をしたいのかよくわかりませんが、それは次のようなものですか?:

#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);

に割り当て~aaいますが、それでよろしいですか? どのようにa定義され、何に設定しようとしていますか? 何を達成しようとしていますか?

于 2009-03-13T01:39:00.287 に答える