All pastes #518854 Raw Edit

Strategie Simple

public c v1 · immutable
#518854 ·published 2007-05-29 13:17 UTC
rendered paste body
int candidats_caches_lignes(Sudoku s)				/* Il est plus pratique d'ecrire une fonction de type int plutôt que void 									          pour pouvoir retourner le nombre de candidats caches valides */	{				int ligne, colonne, val, cd, j, cpt=0;		for(ligne=1;ligne<=9;ligne++)							/* Pour chaque ligne */		for(val=1;val<=9;val++)							/* Toutes les valeurs possibles de 1 a 9 */		{			if((cd=compte_occurence_ligne(s, ligne, val, &colonne))==1)	/* Si le candidat n'apparait qu'une seule fois dans la ligne */			{				s->grille[(9*(ligne-1)+(colonne-1))].valeur=val;	/* On la note car c'est la valeur de la case */				s->grille[(9*(ligne-1)+(colonne-1))].nb_candidats=0;				for(j=0;j<9;j++)					s->grille[(9*(ligne-1)+(colonne-1))].candidat[j]=0;				cpt++;			}		}		return cpt;}int candidats_caches_colonnes(Sudoku s)				/* Il est plus pratique d'ecrire une fonction de type int plutôt que void 									          pour pouvoir retourner le nombre de candidats caches valides */{	int ligne, colonne, val, cd, j, cpt=0;		for(colonne=1;colonne<=9;colonne++)						/* Pour chaque colonne */		for(val=1;val<=9;val++)							/* Toutes les valeurs possibles de 1 a 9 */		{		    if((cd=compte_occurence_colonne(s, colonne, val, &ligne))==1)	/* Si le candidat n'apparait qu'une seule fois dans la ligne */			{				s->grille[(9*(ligne-1)+(colonne-1))].valeur=val;	/* On la note car c'est la valeur de la case */				s->grille[(9*(ligne-1)+(colonne-1))].nb_candidats=0;				for(j=0;j<9;j++)					s->grille[(9*(ligne-1)+(colonne-1))].candidat[j]=0;				cpt++;			}		}		return cpt;}int candidats_caches_regions(Sudoku s)				/* Il est plus pratique d'ecrire une fonction de type int plutôt que void 									          pour pouvoir retourner le nombre de candidats caches valides */{	int region, case_sudoku, val, cd, j, cpt=0;		for(region=1;region<=9;region++)						/* Pour chaque region */		for(val=1;val<=9;val++)							/* Toutes les valeurs possibles de 1 a 9 */		{		     if((cd=compte_occurence_region(s, region, val, &case_sudoku))==1)  /* Si le candidat n'apparait qu'une seule fois dans la ligne */			{				s->grille[case_sudoku].valeur=val;			/* On la note car c'est la valeur de la case */				s->grille[case_sudoku].nb_candidats=0;				for(j=0;j<9;j++)					s->grille[case_sudoku].candidat[j]=0;				cpt++;			}		}		return cpt;}int valide_candidats_caches(Sudoku s){	int cdl=0, cdc=0, cdr=0;		/* Si des candidats caches sont valide, il faut reduire a nouveau 	la liste des candidats pour chaque case*/	cdl=candidats_caches_lignes(s);	if(cdl)		reduire_candidats(s);		cdc=candidats_caches_colonnes(s);	if(cdc)		reduire_candidats(s);		cdr=candidats_caches_regions(s);	if(cdr)		reduire_candidats(s);		return (cdl+cdc+cdr);}