Ricerca appunti sul web

Ricerca personalizzata

venerdì 27 febbraio 2009

Sorgenti c : Sudoku

Scrivere un programma che controlli se una matrice `e una
soluzione ammissibile per il gioco del Sudoku,

#include <stdio.h>
#define N 9 /* grandezza sudoku 9*9 */


int sudoku(int [][N]);
int main()
{
int matrice[N][N];
int row=0;
int column=0;

/* Inserisci i valori del sudoku */
for(row=0; row<N; row++)
for(column=0; column<N; column++)
scanf("%d",&matrice[row][column]);

printf("%d",sudoku(matrice));
return 0;

}

int sudoku(int matrice[][N])
{
int i=0;
int j=0;
int temp=0;
int a=0;
int b=0;
int count=0;
int M=3; /* grandezza sottomatrici 3*3 */
/*************************************/
/*controllo se i numeri sono da 1 a 9*/
/*************************************/
for(i=0; i<N; i++)
for(j=0; j<N; j++)
if (matrice[i][j]<1 || matrice[i][j]>9)
return 0;
//printf("i numeri sono okn");

/*******************/
/* controllo righe */
/*******************/

i=0;
j=0;
while (i<N)
{
while (a<N)
{
temp = matrice[i][a];
//printf("-%d-",temp);
for(j=a; j<N-1; j++)
{
if (temp == matrice[i][j+1])
//{
// printf("n%d-",temp);
return 0;
//}
}a++;

}
a=0;
j=0;
i++;
}
//printf("le righe sono okn");

/*********************/
/* controllo colonne */
/*********************/
i=0;
j=0;
while (i<N)
{
while (a<N)
{
temp = matrice[a][i];
//printf("-%d-",temp);
for(j=a; j<N-1; j++)
{
if (temp == matrice[j+1][i])
//{
// printf("n%d-",temp);
return 0;
//}
}a++;

}
a=0;
j=0;
i++;
}
//printf("le colonne sono okn");

i=0;
j=0;
a=0;
b=0;

/***********************************/
/* controllo la prima sotto matrice*/
/***********************************/
while (count<M)
{
while (b<M)
{
temp = matrice[a][b];
//printf("-%d-",temp);

for (i=0; i<M; i++)
for (j=b; j<M-1; j++)
if (temp == matrice[i][j+1])
return 0;
b++;
}
a++;
b=0;
count++;
}

/*************************************/
/* controllo la seconda sotto matrice*/
/*************************************/
i=0;
j=0;
a=0;
b=3;
count=0;

while (count<M)
{
while (b<2*M)
{
temp = matrice[a][b];
//printf("-%d-",temp);

for (i=0; i<M; i++)
for (j=b; j<(2*M)-1; j++)
if (temp == matrice[i][j+1])
return 0;
b++;
}
a++;
b=3;
count++;
}

/***********************************/
/* controllo la terza sotto matrice*/
/***********************************/
i=0;
j=0;
a=0;
b=6;
count=0;

while (count<M)
{
while (b<3*M)
{
temp = matrice[a][b];
//printf("-%d-",temp);

for (i=0; i<M; i++)
for (j=b; j<3*M-1; j++)
if (temp == matrice[i][j+1])
return 0;
b++;
}
a++;
b=6;
count++;
}

/************************************/
/* controllo la quarta sotto matrice*/
/************************************/
i=0;
j=0;
a=3;
b=0;
count=0;

while (count<M)
{
while (b<M)
{
temp = matrice[a][b];
//printf("-%d-",temp);

for (i=M; i<2*M; i++)
for (j=b; j<M-1; j++)
if (temp == matrice[i][j+1])
return 0;
b++;
}
a++;
b=0;
count++;
}

/************************************/
/* controllo la quinta sotto matrice*/
/************************************/
i=0;
j=0;
a=3;
b=3;
count=0;

while (count<M)
{
while (b<2*M)
{
temp = matrice[a][b];
//printf("-%d-",temp);

for (i=M; i<2*M; i++)
for (j=b; j<2*M-1; j++)
if (temp == matrice[i][j+1])
return 0;
b++;
}
a++;
b=3;
count++;
}

/************************************/
/* controllo la sesta sotto matrice*/
/************************************/
i=0;
j=0;
a=3;
b=6;
count=0;

while (count<M)
{
while (b<3*M)
{
temp = matrice[a][b];
//printf("-%d-",temp);

for (i=M; i<2*M; i++)
for (j=b; j<3*M-1; j++)
if (temp == matrice[i][j+1])
return 0;
b++;
}
a++;
b=6;
count++;
}

/**************************************/
/* controllo la settima sotto matrice*/
/**************************************/
i=0;
j=0;
a=6;
b=0;
count=0;

while (count<M)
{
while (b<M)
{
temp = matrice[a][b];
//printf("-%d-",temp);

for (i=2*M; i<3*M; i++)
for (j=b; j<M-1; j++)
if (temp == matrice[i][j+1])
return 0;
b++;
}
a++;
b=0;
count++;
}

/************************************/
/* controllo l'ottava sotto matrice*/
/************************************/
i=0;
j=0;
a=6;
b=3;
count=0;

while (count<M)
{
while (b<2*M)
{
temp = matrice[a][b];
//printf("-%d-",temp);

for (i=2*M; i<3*M; i++)
for (j=b; j<2*M-1; j++)
if (temp == matrice[i][j+1])
return 0;
b++;
}
a++;
b=3;
count++;
}

/***********************************/
/* controllo la nona sotto matrice*/
/***********************************/
i=0;
j=0;
a=6;
b=6;
count=0;

while (count<M)
{
while (b<3*M)
{
temp = matrice[a][b];
//printf("-%d-",temp);

for (i=2*M; i<3*M; i++)
for (j=b; j<3*M-1; j++)
if (temp == matrice[i][j+1])
return 0;
b++;
}
a++;
b=6;
count++;
}

return 1;
}

0 commenti: