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;