algorithmique (école d'ingénieur) · Chapitre 7 · Exercice de TD
Détecter un circuit
Graphes sans circuit et ordonnancement de projets · niveau 3 (difficile)
Énoncé
La fonction numerotationIsotone du cours suppose le graphe sans circuit et de source unique.
- Que se passe-t-il, dans la version du cours, si le graphe a un circuit ?
- La modifier pour qu'elle accepte plusieurs sources et qu'elle retourne
nullsi le graphe a un circuit. Indication : que se passe-t-il quand la file des sources devient vide avant que tous les sommets soient numérotés ? - Tester sur , , , et sur un graphe à deux sources.
Corrigé
- Les sommets d'un circuit ne deviennent jamais des sources : leur degré entrant ne tombe jamais à zéro. Dans la version du cours, la liste se vide alors que
dnia < n - 1: l'appelpremier(L)sur une liste vide lève uneNullPointerException. - On met toutes les sources initiales dans la file, et l'on s'arrête quand la file est vide ; il y a un circuit si et seulement si tous les sommets n'ont pas été numérotés.
static int[] numerotationIsotone(Liste[] G) { int n = G.length;
int[] DE = degresEntrants(G), NI = new int[n];
int[] file = new int[n]; int deb = 0, fin = 0; // file[deb:fin] : sources à supprimer
for (int i = 0; i < n; i++) if (DE[i] == 0) file[fin++] = i;
int dnia = -1; // dernier numéro attribué
while (deb < fin) {
int i = file[deb++];
NI[i] = ++dnia; // i : source du graphe réduit
for (Liste l = G[i]; !vide(l); l = reste(l)) { int j = premier(l);
DE[j]--; // arc i --> j supprimé
if (DE[j] == 0) file[fin++] = j; // j devient une source
}
}
return (dnia == n - 1) ? NI : null; // file vide trop tôt : circuit
}
Chaque sommet entre au plus une fois dans la file : .
- Exécution :
NI(C) = null
NI(deux sources) = [0, 1, 2, 3]
Dans , le circuit bloque tout après la source .
100 % gratuit
La suite du chapitre est sur Adloun
- 11 autres exercices corrigés dans ce chapitre
- Les 2 QCM du chapitre, le premier sans compte
- Le podcast et la vidéo du chapitre : 2 minutes d'écoute sans compte
- Le tuteur, qui guide pas à pas sans donner la réponse
Sans compte : le cours, le premier QCM et 2 minutes de podcast et de vidéo. Exercices et tuteur : inscription gratuite en 30 secondes, sans carte bancaire.