1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87
|
#include <stdio.h>
#include <conio.h>
#define TailleMax 20
#define vrai 1
#define faux 0
int Damier[TailleMax][TailleMax];
void Affiche (int Dim ) {
int ParcourLigne,ParcourColonne;
for (ParcourLigne=0;ParcourLigne<Dim;ParcourLigne++)
{
for(ParcourColonne=0;ParcourColonne<Dim;ParcourColonne++)
printf("%d\t",Damier[ParcourLigne][ParcourColonne]);
printf("\n");
}
}
void Init(int Dim) {
int ParcourLigne,ParcourColonne;
for (ParcourLigne=0;ParcourLigne<Dim;ParcourLigne++)
for(ParcourColonne=0;ParcourColonne<Dim;ParcourColonne++)
Damier[ParcourLigne][ParcourColonne] = 0;
}
//
//fonction qui vérifie si on peut poser une dame à la
//position Ligne,Colonne en regardant les colonnes vers la
//gauche.
//
int PeutPoser(int Ligne, int Colonne,int Dim){
int ParcourLigne,ParcourColonne,ok;
ok = vrai;
for ((ParcourLigne=Ligne,ParcourColonne=Colonne-1);ParcourColonne>0;ParcourColonne--)
if (Damier[ParcourLigne][ParcourColonne]) ok= faux;
for ((ParcourLigne=Ligne-1,ParcourColonne=Colonne-1);ParcourLigne>0&&ParcourColonne>0;(ParcourLigne--,ParcourColonne--))
if (Damier[ParcourLigne][ParcourColonne]) ok=faux;
for ((ParcourLigne=Ligne+1,ParcourColonne=Colonne-1);ParcourLigne<=Dim&&ParcourColonne>0;(ParcourLigne++,ParcourColonne--))
if (Damier[ParcourLigne][ParcourColonne]) ok = faux;
return ok;
}
//
//
//fonction qui essaye mettre une dame dans la colonne "Colonne"
//si on peut on passe au colonne suivant par appel recusive, sinon
//on cherche une position dans la colonne précédente.
//
int Positionner(int Colonne, int Dim){
int ParcourLigne,NbreSolutions=0;
if (Colonne==Dim) {
Affiche(Dim);
printf("\n");
return 1;
}
//
//Mettre la dame dans une ligne du colonne
//
for (ParcourLigne=1;ParcourLigne<=Dim;ParcourLigne++)
if (PeutPoser(ParcourLigne,Colonne+1,Dim))
{
Damier[ParcourLigne][Colonne+1]=vrai;
NbreSolutions+=Positionner(Colonne+1,Dim);
Damier[ParcourLigne][Colonne+1]=faux;
}
return NbreSolutions;
}
//
void main(){
int TailleDamier;
printf("Donner la dimension du damier \n");
scanf("%d",&TailleDamier);
Init(TailleDamier);
printf("%d solutions\n",Positionner(0,TailleDamier));
printf("Taper sur une touche pour quitter...");
_getch();
} |
Partager