Bonjour,

Je souhaiterai construire des districts sous forme de groupe de secteurs sous certaines contraintes.
Données du problème :
const int sizemax=101; // nombre de secteurs
const int numberDistricts=4; // nombre de districts
const int parametre_distance = 10 ; // distance max entre deux secteurs

Pour construire ces districts il faut :
Step 1
// choisir un secteur aleatoirement entre deux bornes
// stocker ce secteur dans la premiere cellule du Tab_District
// parcourir tous les secteurs différents du secteur déjà inséré dans la première case
// insérer tous les secteurs dans ce tableau a condition que la distance entre le premier secteur et le nouveau secteur ne
// dépasse pas un paramètre distance qu'on note par "parametre_distance"
Step 2
// remplir tous les autres districts de la meme façon à condition que le secteur en première position soit différentes des
//secteurs déjà insérés.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
/* pseudo code*/
/*
1. Choisir un secteur de base S
2. vérifier si déjà pris comme secteur de base
	sinon parcourir tous secteurs différents de S en respectant critère à les ajouter aux districts courants
		passer au district suivant					
*/
Voici mon code:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
cerr <<"numberDistricts"<<numberDistricts<<endl;
					cerr <<"sizemax"<<sizemax<<endl;
 
					srand ((unsigned) time (NULL));
					int Tab_District[numberDistricts][sizemax];	
					int borne_max_sec = sizemax-1;
					int borne_min_sec = 0;
					// Choisir un secteur de base S
					for(i=0; i<numberDistricts; ++i)
					{
						cerr << " ************ district " << i << "*************" << endl;
						// Choisir un secteur de base S
						secteur_principal = rand()%(borne_max_sec - borne_min_sec) + borne_min_sec;
						//cerr << " secteur " << secteur_principal << endl;
						Tab_District[i][0] = secteur_principal;
						test_secteur = true;
						int t=0;
						//vérifier si déjà pris comme secteur de base
						if(Tab_District[t+1][0] == Tab_District[i][0] )
						{
							test_secteur = false;
						}
						//sinon parcourir tous secteurs différents de S en respectant critère à les ajouter aux districts courants
						else
						{
							for(j=0; j<sizemax; j++)
							{
								if(td[Tab_District[i][0]][j] < parametre_distance)
								{
									//cerr <<"deplacement"<<td[Tab_District[i][0]][j]<<endl;
									Tab_District[i][j] = j;
									cerr << " secteur numero = " << Tab_District[i][j] << endl;
								}
							}
						}
					}
Le problème que je rencontre c'est que mes tableaux de districts contiennent parfois les mêmes secteurs (dans la première case).
Un exemple d'affichage de mon code :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
************ district 1*************
secteur numero = 34
secteur numero = 43
secteur numero = 56
secteur numero = 62
secteur numero = 66
secteur numero = 83
secteur numero = 91
secteur numero = 97
 
************ district 2*************
secteur numero = 16
secteur numero = 22
secteur numero = 30
secteur numero = 33
secteur numero = 35
secteur numero = 44
secteur numero = 59
secteur numero = 67
secteur numero = 71
secteur numero = 81
secteur numero = 84
************ district 3*************
secteur numero = 19
secteur numero = 29
secteur numero = 45
secteur numero = 54
secteur numero = 77
************ district 4*************
secteur numero = 16
secteur numero = 22
secteur numero = 30
secteur numero = 33
secteur numero = 35
secteur numero = 44
secteur numero = 59
secteur numero = 67
secteur numero = 71
secteur numero = 81
secteur numero = 84
Vous voyez très bien qu'il y a un problème dans le district 2 et 4.
Pour avoir un résultat correct il faut que les deux premières cases de ces deux districts (secteur 16) soient différentes.

Je vous remercie de me corriger mon code.
Bonne soirée à tous.