1 votes

Récupérer et stocker des éléments (selon des conditions) à partir d'un tableau

Étant donné un tableau de 81 éléments (censé représenter une grille 9x9) comment puis-je parcourir chaque élément, en prenant les trois autour de lui puis effectuer une opération sur ceux-ci, puis continuer avec les trois suivants de chaque ligne, colonne ou sous-matrice. Regardez ci-dessous ou une grille de sudoku pour voir la disposition.

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

Par exemple, j'ai

int grid[81];

et

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

Puisque la grille totale 9x9 peut être divisée en 9 des catégories suivantes, il y a neuf éléments dans chaque tableau, et j'espère prendre les éléments de chaque colonne (l'axe x) par groupes de trois, effectuer

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

// ou

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

sur eux, prendre les trois nombres résultants, et les traiter, puis les stocker dans le tableau.

Si cela semble impossible, désolé, je voudrais une autre façon de faire cela. Je suis certainement ouvert aux suggestions...

1voto

strager Points 41713

Un autre essai :

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); // Effectuer sur un sous-grille de 3x3
applyThingy(&grid[ROW(n)], 1, 0); // Effectuer sur la ligne
applyThingy(&grid[COL(n)], 0, 1); // Effectuer sur la colonne

0voto

sth Points 91594

Je ne suis pas sûr de ce que vous voulez faire, mais est-ce quelque chose comme cela ? :

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

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

Aussi, je ne suis pas sûr de ce que vous voulez faire avec votre opération

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

Vous assignez ~a à a, est-ce ce que vous voulez ? Comment a est-il défini, et que tentez-vous de lui attribuer ? Quel est l'objectif recherché ?

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X