Como conferir se uma matriz de sudoku esta certa?
Bem, matriz Sudoku é aquela onde o mesmo número não se repete na mesma linha e nem na mesma coluna!
RESOLVENDO:
#include<stdio.h>
#include<conio.h>
int mat[9][9];
int num=9;
void preencher();
int conflinha();
int confcol();
int main()
{
 preencher();//preenche a matriz
 if(conflinha() ==1 && confcol() ==1)//se o retorno da funcao for igual a 1.... a matriz esta correta
  printf("\n**PARABENS**");
 else//senao...
  printf("\nERRADO");
 
 
 getch();//pause para ler, equivalente ao system("pause")
 return 1;
}
void preencher()//preenche linha por linha
{
 int i, j,x;
 for(i=0; i<num; i++)
  for(j=0; j<num; j++)
  {
   printf("\nPosicao [%d][%d]: ", i+1, j+1);
   scanf("%d",& x);
   if(x<0 || x>9){//como aceita-se apenas numero naturais, entre 0 e 9....
    printf("Apenas numeros naturais, entre 0 e 9");
    j--;
    continue;}
   else
    mat[i][j]=x;
  }
}
int conflinha()//confere linha por linha
{
 int x=0,j,soma=0, i=0;
 while(i<num)//o laco while vai ate a ultima linha
 {
  for(j=0; j<num;j++)
   if(mat[i][x] == mat[i][j] && x!=j)//confere o elemento com os demais da linha
    soma+=1;
  x++;
  if(x==num)//muda de coluna
  {
   i++;
   x=0;
  }
 }
 if(soma==0)//como inicio-se soma =0, se for diferente e que tem elementos iguais, senao... ok
  return 1;
 else
  return 0;
}
int confcol()//faz o mesmo que a funcao conflinha faz, so que confere colunas
{
 int x=0,j,soma=0, i=0;
 while(i<num)
 {
  for(j=0; j<num;j++)
   if(mat[x][i] == mat[i][j] && j!=x)
    soma+=1;
  x++;
  if(x==num)
  {
   i++;
   x=0;
  }
 }
 if(soma==0)
  return 1;
 else
  return 0;
}
Comentem!!!
 
como eu faço um sudoku 6X6, mais nesse caso, o usuario coloca os numeros fixos, que nao pode mudar. e depois coloca os numeros, se tiver um repetido na coluna, na linha ou no quadrante, tem que ser avisado.
ResponderExcluirdidi s2 fifi
ResponderExcluir