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 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122
| #include <stdio.h>
#include <iostream.h>
int nbcase=8;
int point[8][8]; //tableau representant l'echiquier
int x,y; //variables pour les boucles de l'affichage du tableau
int c[8]; //tableau qui contient le numero de ligne des dames
int d ; // variable pour les entrees-sorties
int e[8]; //tableau qui contient les valeurs de demarrage des boucles
dame(int,int,int); //fonction pour placer ou retirer une dame
afftable(); //fonction qui affiche les resultats
placedame(int);
int main()
{
for (x=0;x<nbcase;x++) //initialise le tableau avec des 0
{
e[x]=0;
for (y=0;y<nbcase;y++)
{
point[x][y]=0;
}
}
d=1;
cout<<endl;
if (d<0 || d>nbcase -1){
d=0;
}
e[0]=d;
placedame(0); //essaye de placer les dames
afftable();
cin>>x; //permet a l'utilisateur de voir la reponse
return 0;
}
void placedame(int ligne) //fonction pour essayer les positions possibles
{
for (c[ligne]=e[ligne];c[ligne]<nbcase;c[ligne]++)
{
if (point[c[ligne]][ligne]==0)
{
e[ligne]=c[ligne]+1;
dame(ligne,c[ligne],2);
if (ligne<nbcase -1)
placedame(ligne+1);
if (ligne==nbcase -1)
{
afftable();
dame(ligne,c[ligne],-2);
dame(ligne-1,c[ligne-1],-2);
placedame(ligne-1);
}
break ;
}
}
if (ligne !=0)
{
if (c[ligne]>=nbcase)
{
for (x=ligne;x<nbcase;x++)
e[x]=0;
dame(ligne-1,c[ligne-1],-2); //on efface la dame de la colonne juste avant
placedame(ligne-1); //on essaye de placer la dame sur la colonne d'avant
}
}
}
void dame(int a,int b,int num)
{
for (x=0;x<nbcase;x++)
{
if (x !=a)
point[b][x]+=num; //trace les lignes horizontales et verticales occupees
if (x !=b)
point[x][a]+=num;
}
for (x=1;x<nbcase;x++) // trace les lignes diagonales occupees
{
if (a+x<nbcase && b+x<nbcase)
point[b+x][a+x]+=num;
if (a-x>=0 && b-x>=0)
point[b-x][a-x]+=num;
if (a-x>=0 && b+x<nbcase)
point[b+x][a-x]+=num;
if (a+x<nbcase && b+x>=0)
point[b-x][a+x]+=num;
}
if (num>0)
point[b][a]+=1; //place la dame
if (num<0)
point[b][a]-=1; //retire la dame
}
void afftable()
{
for (x=0;x<nbcase;x++)
{
for (y=0;y<nbcase;y++)
{
if (point[x][y] !=1)
cout<<0<<" ";
if (point[x][y]== 1)
cout<<point[x][y]<<" ";
}
cout<<endl;
}
cout<<endl;
cout<<"entier = une etape ,lettre=toutes les etapes"<<endl;
cin>>x;
} |
Partager