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
|
//soit:
//*nbNodes le nombre de noeuds dans un graphe
//*c le nombre représentant un noeud (0 <= c < nbNode)
//*set l'ensemble des ensemble complètement liés
//alors:
//la procédure se charge de créer et d'ajouter à set les ensembles complètements
//lié utilisant les noeuds c jusque nbNodes-1
procedure createSets(int nbNodes, int c, Set<Set> set):
if(c == nbNodes) {
return;
}
for(int i = c + 1; i < nbNodes; i++) {
if (linkBetween(c, i)) {
Set e;
e->add(c);
e->add(i);
fillSet(nbNodes, i + 1, e, set);
}
}
createSets(nbNodes, c + 1, set);
}
//soit:
//*nbNodes le nombre de noeuds dans un graphe
//*c un nombre représentant un noeud
//*e un ensemble de noeuds tel qu'il existe un lien entre chacun de ses membres
// pris deux à deux
//*sets un ensemble d'ensembles de noeuds complètements liés
//alors:
//la procédure se charge de créer des ensembles complètement liés qui utilisent
//les noeuds présents dans e. À ces ensembles ne seront ajoutés que des
//noeuds n tels que c<= n < nbNodes et d'ajouter ces ensembles dans sets
procedure fillSet(int nbNodes, int c, Set e, Set<Set>* sets) {
for(int i = c ; i < nbNodes; i++) {
bool ok = true;
foreach( j in e ){
ok = ok && linkBetween(j, i);
}
if(ok) {
Set other = e->copy();
tmp->add(i);
fillSet(nbNodes, i, tmp, set);
}
}
if(e->size() > 2) {
sets->add(e);
}
} |
Partager