terça-feira, 28 de junho de 2011

CONFERINDO UMA MATRIZ SUDOKU

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!!!

2 comentários:

  1. 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.

    ResponderExcluir