Sei sulla pagina 1di 4

Cognome e Nome: ___________________________

Algoritmi e Principi Firma: __________________________________


dell'Informatica
Appello d’esame
10 settembre 2019
Tempo: 1h15 Esempio di albero con mogli/mariti /figli

Esercizio 4 (5.5 punti)

Si vuole rappresentare un albero genealogico in cui per ciascuna per-


sona deve essere facilmente individuabile: padre, fratelli, mogli/mariti
e figli.
a) Si progetti e si riporti in C++ una struttura dati basata su array o
puntatori per memorizzare questo tipo di informazione.
b) Si scriva quindi un algoritmo C++ che data una persona dell’albero
genealogico, individui tutti i suoi antenati presenti nell’albero, stam-
pandoli a partire dai genitori/nonni/bisnonni/etc.
Cognome e Nome: ___________________________
Cognome e Nome: ___________________________

Esercizio 5 (3 punti)
Dato il seguente frammento di codice, si calcoli la complessità nei casi in cui H e K valgano:

int f (int n){


int a=n;
if (n<=1000)
for (int i=1; i<=n; i++)
for (int j=1; j<= K; j++)
a+=n;
else
for (int i=1; i<=n; H)
a+=n;
return a;
}

a) K=2^i e H= (i=i+3)

b) K=i^2 e H= (i=i*4)
Cognome e Nome: ___________________________

Esercizio 6 (4 punti)

Dato un grafo G non orientato (e non pesato)


a) scrivere un algoritmo che, dato un nodo di partenza s, un nodo di arrivo t (con s ≠ t), ed un
insieme di nodi N, restituisce 0 se non esiste un cammino da s a t che non passi per i nodi
dell’insieme N, altrimenti ritorna la lunghezza del cammino più corto tra s e t (ovvero il numero
di archi attraversati) che non passa per nodi dell’insieme N.
b) Qual è la complessità dell’algoritmo proposto nel caso peggiore?