Per fare il controllo su una riga o su una colonna il principio è lo stesso di un bubblesort,solo che nel confronto dell' array se trovi due elementi simili la funzione ritorna falso,lo stesso avviene se trovi un elemento che non è compreso tra 1 e 9.
codice:
bool correct(int *ptr)
{
    int i;
    int j;
    for(j=0;j<9;j++)
        for(i=0;i<9;i++)
        {
            if(ptr[j]<1||ptr[j]>9)
                return false;
            if(ptr[j]==ptr[i]&&j!=i)
                return false;
        }
    return true;
}
Confronta gli elementi di un array con procedimento a bolle,cioè prendendo prima il primo elemento e confrontandolo con gli altri 8,poi il secondo,poi il terzo,ecc...La condizione j!=i è necessaria,altrimenti è sempre verificato che ptr[0]=ptr[0],perchè il numero è identico.
Se l' algoritmo riesce ad arrivare fino in fondo significa che la condizione è soddisfatta e la funzione ritorna true,la riga (o colonna) è corretta.
Per fare lo stesso con un blocco 3x3 basta fare una piccola variante di questa funzione.
Occhio che non l' ho testata,l' ho scritta così al volo,potrebbe non funzionare.