LaDissertation.com - Dissertations, fiches de lectures, exemples du BAC
Recherche

Code Source Sudoku En C

Commentaires Composés : Code Source Sudoku En C. Recherche parmi 298 000+ dissertations

Par   •  30 Mars 2014  •  3 111 Mots (13 Pages)  •  937 Vues

Page 1 sur 13

#include <stdio.h>

#include <stdlib.h>

#define E_OK 0 /* TOUT VA POUR LE MIEU */

#define E_MAUVAISE_LIGNE 1 /* LIGNE HORS L'INTERVAL [0,8] */

#define E_MAUVAISE_COLONE 2 /* COLONE HORS L'INTERVAL [0,8] */

#define E_NUM_EXIST 3 /* NUM EXISTE DEJA SUR LA MÊME LIGNE,COLONE,OU RÉGION */

#define E_RESOLU 4 /* GRILLE RESOLUE */

#define E_POSSIBILITES_MANQUANTES 5 /* !!! FAUSSE GRILLE !!! */

#define T_MAX 9 /* DIMENSION DE LA GRILLE */

typedef unsigned short CodeCase;

int grille[T_MAX][T_MAX];/* * Matrice qui va contenir la grille aprés lecture du fichier,

ainsi que le val_retourat final apres resolution dans le cas où

la grille n'est pas fausse

/

/**

Fonction qui lit une grille à partir d'un fichier txt

/

void lire_grille(char * chemin) {

int i,j;

FILE * source;

source = fopen(chemin,"r");

for (i = 0; i < T_MAX; i++)

{

for(j= 0; j < T_MAX; j++)

{

fscanf(source,"%d",&grille[i][j]);

}

}

fclose(source);

}

/**

Fonction qui initialise toutes les cases la matrice T_MAXxT_MAX representant la grille à 0

/

void zero_matrice( int a[T_MAX][T_MAX] ) {

int ligne, col;

for ( ligne = 0; ligne < T_MAX; ligne++ )

for ( col = 0; col < T_MAX; col++ ) a[ligne][col] = 0;

}

/**

Crée un mask à partir d'un des numéros de la grille passé en parametre

puis l'applique à la grille contenant les CodeCases equivallents à chacun

des composants, en faisant un OU (OR) logique bit par bit avec l'ancienne

valeur contenue dans la case p[ligne][col]

/

void set_possible( CodeCase p[T_MAX][T_MAX], int ligne, int col, int num ) {

CodeCase mask;

mask = 1 << ( num - 1 );

p[ligne][col] |= mask;

}

/**

Crée un mask à partir d'un des numéros de la grille passé en parametre

puis l'applique à la grille contenant les CodeCases equivallents à chacun

des composants, en faisant un ET (AND) logique bit par bit avec l'ancienne

valeur contenue dans la case p[ligne][col] et le complement à un du mask

calculé

/

void set_impossible( CodeCase p[T_MAX][T_MAX], int ligne, int col, int num ) {

CodeCase mask;

mask = 1 << ( num - 1 );

p[ligne][col] &= ~mask;

}

/**

Calcul un mask à partir d'un numéro passé en parametre pour faire un ET logique

entre ce dernier et le CodeCase p[ligne][col] ainsi on peut savoir si la case

(ligne,col) de la grille peut prendre la valeur num (on retourne 1)

ou pas(on retourne 0)

/

int est_possible(CodeCase p[T_MAX][T_MAX], int ligne, int col, int num ) {

CodeCase mask;

mask = 1 << ( num - 1 );

if ( p[ligne][col] & mask ) return( 1 );

return ( 0 );

}

/**

fonction qui retourne le nombre de possiblilité que peut prendre la case

p[ligne][col], ce qui correspond au poid binaire,

N.B. On travaille sur la partie basse des 2 octets

/

int poidbinaire( CodeCase p[T_MAX][T_MAX], int ligne, int col ) {

CodeCase mask;

int compt;

compt = 0;

mask = 1 << 8;

while( mask )

{

if ( mask & p[ligne][col] ) compt++;

mask >>= 1;

}

return( compt );

}

/**

Regles des Candidats double appliquée aux lignes

/

void l_candidat_double(CodeCase p[T_MAX][T_MAX])

...

Télécharger au format  txt (16.5 Kb)   pdf (169.9 Kb)   docx (16 Kb)  
Voir 12 pages de plus »
Uniquement disponible sur LaDissertation.com