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
|
CListOfSommets* dejaTries = new CListOfSommets;
int i,j;
for (i=0;i<listeSommets->GetCount();i++)
{
CSommet* pSommet = listeSommets->Item(i);
// Cas de sommet considéré comme n'étant pas une liaison (peut changer au cours de l'application)
if (pSommet ->bloquant())
{
CZone* pZone= new CZone();
pZone->AddTail(pSommet );
dejaTries->AddTail(pSommet);
zones->AddTail(pZone);
continue;
}
// On verifie que le sommet n'a pas deja été traité
if (sommetInListe(dejaTries, pSommet)) continue;
// On fait la recursivite
CZone* pZone= new CZone();
pZone->AddTail(pSommet);
dejaTries->AddTail(pSommet);
nouvelleZone(pSommet , pZone, dejaTries);
zones->AddTail(pZone);
}
void MaClasse::nouvelleZone(CSommet* pSommet, CZone* pZone, CListOfSommets* dejaTries)
{
int i;
for (i=0;i<listeArretes->GetCount();i++)
{
CSommet* pSommetSuivant = NULL;
CArrete* pArrete = listeArretes->Item(i);
// Pas de "faux" lien (spécificité de mon app)
if (pArrete->bloquant()) continue;
if (pArrete->begin == pOp)
{
pSommetSuivant = pArrete->end;
}
else if (pArrete->end == pOp)
{
pSommetSuivant = pArrete->begin;
}
// Si ce lien ne correspond pas au sommet en cours on passe au suivant
if (!pSommetSuivant) continue;
// Si ce sommet est deja traité on passe au suivant
if (operationInListe(dejaTries, pSommetSuivant)) continue;
pZone->AddTail(pSommetSuivant);
dejaTries->AddTail(pSommetSuivant);
nouvelleZone(pSommetSuivant, pZone, dejaTries);
}
} |
Partager