Remplissage tableau sous contraintes
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
Citation:
// 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
Citation:
// 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:
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:
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:
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.