for(k=1; k<10; k++) digVisto[k]=FALSE;

    // verificar o quadrado 3x3 com inicio em 3*(i/3),3*(i%3)

    baseLin=3*(i/3); baseCol=3*(i%3);

    for(m=baseLin; m<baseLin+3; m++)

      for(n=baseCol; n<baseCol+3; n++){

        if(digVisto[s[m][n]]){

         printf("Repete o digito %d no 3x3 de ordem %d\n", s[i][j],i);

         return FALSE;

        }

        digVisto[s[m][n]]=TRUE;

      }

  }

 

ou ainda

 

m=3*(i/3); n=3*(i%3);

digVisto[s[m][n]]=TRUE;

if(digVisto[s[m][n+1]]) return FALSE;

digVisto[s[m][n+1]=TRUE;

if(digVisto[s[m][n+2]]) return FALSE;

digVisto[s[m][n+2]]=TRUE;

if(digVisto[s[m+1][n]]) return FALSE;

digVisto[s[m+1][n]]=TRUE;

if(digVisto[s[m+1][n+1]]) return FALSE;

digVisto[s[m+1][n+1]]=TRUE;

if(digVisto[s[m+1][n+2]]) return FALSE;

digVisto[s[m+1][n+2]]=TRUE;

if(digVisto[s[m+2][n]]) return FALSE;

digVisto[s[m+2][n]]=TRUE;

if(digVisto[s[m+2][n+1]]) return FALSE;

digVisto[s[m+2][n+1]]=TRUE;

if(digVisto[s[m+2][n+2]]) return FALSE;