Donada la classe graf que permet gestionar grafs dirigits i no etiquetats amb n vèrtexs (els vèrtexs són enters dins l’interval [0, n−1]), cal implementar el mètode
Les arestes es guarden en llistes d’adjacència: un vector de n elements que conté llistes simplement encadenades amb els successors de cadascun dels n vèrtexs. Un dels jocs de prova públics és aquest graf que conté 5 vèrtexs (mira el PDF de l’enunciat):
les seves arestes estarien guardades en un vector amb 5 llistes d’adjacència, cada llista conté els successors de cadascun dels 5 vèrtexs:
0: 2, 1 1: 3 2: 1, 4, 3 3: 4: 0
el qual donaria com a resultat el vector T F T F T (T=true, F=false), indicant que hi ha cicles des dels vèrtexs 0, 2 i 4. En canvi no es detecten cicles des dels vèrtexs 1 i 3.
Cal enviar a jutge.org la següent especificació de la classe graf i la implementació del mètode dins del mateix fitxer (la resta de mètodes públics ja estan implementats). Indica dins d’un comentari a la capçalera del mètode el seu cost en funció del nombre de vèrtexs n i el nombre d’arestes m del graf.
Degut a que jutge.org només permet l’enviament d’un fitxer amb la solució del problema, en el mateix fitxer hi ha d’haver l’especificació de la classe i la implementació del mètode hi_ha_cicles (el que normalment estarien separats en els fitxers .hpp i .cpp).
Per testejar la classe disposes d’un programa principal que llegeix un graf i després crida el mètode hi_ha_cicles.
Entrada
L’entrada conté un graf: el nombre de vèrtexs, el nombre d’arestes i una llista d’arestes. Cada aresta s’indica pels dos vèrtexs que relaciona.
Sortida
Escriu una línia amb un booleà per cada vèrtex (T=true, F=false) separats per espais que indiquen si hi ha algun cicle des de cada vèrtex del graf.
Observació
Només cal enviar la classe requerida i la implementació del mètode hi_ha_cicles. Pots ampliar la classe amb mètodes privats. Segueix estrictament la definició de la classe de l’enunciat.
Indica dins d’un comentari a la capçalera del mètode el seu cost en funció del nombre de vèrtexs n i el nombre d’arestes m del graf.
Input
1 0
Output
F
Input
2 0
Output
F F
Input
2 1 0 1
Output
F F
Input
2 2 0 1 1 0
Output
T T
Input
3 4 0 2 0 1 1 2 2 0
Output
T T T
Input
5 7 4 0 0 2 0 1 2 1 2 4 2 3 1 3
Output
T F T F T
Input
5 7 0 1 0 3 1 2 1 3 1 4 2 4 3 4
Output
F F F F F
Input
6 9 1 5 1 0 3 1 4 0 0 5 5 1 2 3 0 1 5 0
Output
T T T T T T
Input
10 14 0 1 2 3 4 5 6 7 8 9 0 2 2 4 3 4 6 8 3 1 5 8 7 5 1 0 1 9
Output
T T T T F F F F F F