| 12
 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