#include #include #define NB_DAMES 8 int dame_sans_danger(const char *tab, int ligne, int colonne) { int i; for (i = 0; i < ligne; ++i) if (tab[i] == colonne /* dame sur la même colonne */ || abs(colonne - tab[i]) == ligne - i) /* dame en diagonale */ return 0; return 1; } void afficher_echiquier(const char *tab) { int i, j; for (i = 0; i < NB_DAMES; i++) { for (j = 0; j < NB_DAMES; j++) if (tab[i] == j) printf("X "); else printf("O "); printf("\n"); } printf("\n\n"); } void ajoute_dame(char *tab, int *nb_solutions, int ligne) { int colonne; if (ligne == NB_DAMES) { afficher_echiquier(tab); (*nb_solutions)++; } else for (colonne = 0; colonne < NB_DAMES; colonne++) if (dame_sans_danger(tab, ligne, colonne)) { tab[ligne] = colonne; ajoute_dame(tab, nb_solutions, ligne + 1); tab[ligne] = -1; } } int main(void) { char tab[NB_DAMES]; int nb_sol = 0; ajoute_dame(tab, &nb_sol, 0); printf("Les %d reines peuvent se resoudre de %d methodes\n", NB_DAMES, nb_sol); return 0; }