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 amb un algorsime recursiu el mètode
Les arestes es guarden en llistes d’adjacència: un vector de n elements que conté vectors amb els successors de cadascun dels n vèrtexs. Per exemple, un dels jocs de prova públics llegeix 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, els successors de cadascun dels 5 vèrtexs:
0 [2, 1] 1 [3] 2 [1, 4, 3] 3 [] 4 [0]
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_cami (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 llegeix vàries parelles de vèrtexs per esbrinar si hi ha camí per anar d’un vèrtex a l’altre.
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. A continuació hi ha vàries parelles de vèrtexs dels quals haurem d’esbrinar si hi ha camí per anar d’un a l’altre.
Sortida
Per a cada parella de vèrtexs de l’entrada, per exemple v1 i v2, escriu una línia amb el text "SI hi ha camí de v1 a v2" o "NO hi ha camí de v1 a v2".
Observació
Només cal enviar la classe requerida i la implementació del mètode hi_ha_cami. Pots ampliar la classe amb mètodes privats. Segueix estrictament la definició de la classe de l’enunciat.
La solució a aquest problema ha de ser recursiva.
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 0 0
Output
SI hi ha camí de 0 a 0
Input
2 0 0 1 1 0
Output
NO hi ha camí de 0 a 1 NO hi ha camí de 1 a 0
Input
2 1 0 1 0 1 1 0
Output
SI hi ha camí de 0 a 1 NO hi ha camí de 1 a 0
Input
2 2 0 1 1 0 0 1 1 0
Output
SI hi ha camí de 0 a 1 SI hi ha camí de 1 a 0
Input
3 3 0 2 0 1 1 2 0 1 0 2 1 0 1 2 2 0 2 1
Output
SI hi ha camí de 0 a 1 SI hi ha camí de 0 a 2 NO hi ha camí de 1 a 0 SI hi ha camí de 1 a 2 NO hi ha camí de 2 a 0 NO hi ha camí de 2 a 1
Input
5 7 4 0 0 2 0 1 2 1 2 4 2 3 1 3 0 1 0 2 0 3 0 4 1 0 1 2 1 3 1 4 2 0 2 1 2 3 2 4 3 0 3 1 3 2 3 4 4 0 4 1 4 2 4 3
Output
SI hi ha camí de 0 a 1 SI hi ha camí de 0 a 2 SI hi ha camí de 0 a 3 SI hi ha camí de 0 a 4 NO hi ha camí de 1 a 0 NO hi ha camí de 1 a 2 SI hi ha camí de 1 a 3 NO hi ha camí de 1 a 4 SI hi ha camí de 2 a 0 SI hi ha camí de 2 a 1 SI hi ha camí de 2 a 3 SI hi ha camí de 2 a 4 NO hi ha camí de 3 a 0 NO hi ha camí de 3 a 1 NO hi ha camí de 3 a 2 NO hi ha camí de 3 a 4 SI hi ha camí de 4 a 0 SI hi ha camí de 4 a 1 SI hi ha camí de 4 a 2 SI hi ha camí de 4 a 3
Input
6 7 1 5 1 0 3 1 4 0 0 5 5 1 2 3 0 1 0 2 0 3 0 4 0 5 1 0 1 2 1 3 1 4 1 5 2 0 2 1 2 3 2 4 2 5 3 0 3 1 3 2 3 4 3 5 4 0 4 1 4 2 4 3 4 5 5 0 5 1 5 2 5 3 5 4
Output
SI hi ha camí de 0 a 1 NO hi ha camí de 0 a 2 NO hi ha camí de 0 a 3 NO hi ha camí de 0 a 4 SI hi ha camí de 0 a 5 SI hi ha camí de 1 a 0 NO hi ha camí de 1 a 2 NO hi ha camí de 1 a 3 NO hi ha camí de 1 a 4 SI hi ha camí de 1 a 5 SI hi ha camí de 2 a 0 SI hi ha camí de 2 a 1 SI hi ha camí de 2 a 3 NO hi ha camí de 2 a 4 SI hi ha camí de 2 a 5 SI hi ha camí de 3 a 0 SI hi ha camí de 3 a 1 NO hi ha camí de 3 a 2 NO hi ha camí de 3 a 4 SI hi ha camí de 3 a 5 SI hi ha camí de 4 a 0 SI hi ha camí de 4 a 1 NO hi ha camí de 4 a 2 NO hi ha camí de 4 a 3 SI hi ha camí de 4 a 5 SI hi ha camí de 5 a 0 SI hi ha camí de 5 a 1 NO hi ha camí de 5 a 2 NO hi ha camí de 5 a 3 NO hi ha camí de 5 a 4