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
Step 2// 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"
// 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.Voici mon code:
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 */
Le problème que je rencontre c'est que mes tableaux de districts contiennent parfois les mêmes secteurs (dans la première case).
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; } } } }
Un exemple d'affichage de mon code :
Vous voyez très bien qu'il y a un problème dans le district 2 et 4.
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
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.
Partager