PDF created with FinePrint pdfFactory trial version http://www

Transcript

PDF created with FinePrint pdfFactory trial version http://www
Laboratorio di Algoritmi e Strutture Dati
Anno Accademico 2002/2003
Prova del 18 febbraio 2003
Cognome e Nome:
Numero di Matricola:
Docente:
Spazio riservato alla correzione
1
/15
2
/50
3
/15
4
/20
totale
/100
Non usare altri fogli, usare solo lo spazio sottostante. Fogli differenti da questo non saranno presi in considerazione per
la correzione.
1. Provare il seguente teorema. Se si fa riferimento ad altri lemmi e/o corollari è necessario
enunciarli.
Teorema:
Sia G=(V,E) un grafo connesso non direzionato con una funzione di peso w a valori reali definita su
E. Sia A un sottoinsieme di E che è incluso in un minimo albero ricoprente per G, sia (S, V-S) un
qualsiasi taglio di G che rispetta A, e sia (u,v) un arco leggero (light edge) che attraversa (S, V-S).
Allora, l’arco (u,v) è un arco sicuro (safe edge) per A.
2. Data la seguente parziale interfaccia della classe PQueue (coda a priorità) contenente stringhe a
cui è associata una priorità indicata da un intero:
class PQueue {
public:
PQueue ();
// Costruttore di default
PQueue (const vector<string>& vs, const vector<int>& vi);
// Costruttore per inizializzazione (gli elementi del vettore vs
//devono essere inseriti nella coda a priorità con priorità
// indicata da vi –la priorità di vs[i] è vi[i]).
PQueue (const PQueue&);
// Costruttore per copia
int size();
// Restituisce la grandezza della coda (numero nodi)
bool isEmpty()
// Restituisce true se la coda è vuota false altrimenti
bool insert(const string& s, int i)
// Inserisce nella coda la stringa s che ha priorità i; se s
// già appartiene alla coda allora modifica la sua priorità
string& getMax()
// Restituisce (senza cancellare) la stringa con
// priorità massima
private:
node* _front;
node* _rear;
unsigned int _size;
}
Indicare l’interfaccia e la rappresentazione interna della classe node. Implementare i costruttori ed i
metodi indicati nell’interfaccia pubblica delle classi node e PQueue.
3 La software house Magic Arts ha bisogno di un esperto in programmazione object-oriented per
progettare l'architettura di un nuovo video-game ispirato alle avventure di Harry Potter. L'esperto
deve definire l'insieme degli oggetti coinvolti nel gioco e le loro relazioni. In particolare, è
necessario individuare l'insieme dei personaggi che appaiono nel gioco e disegnarne il grafo di
derivazione.
Dalle discussioni con gli sceneggiatori della Magic Arts è scaturito che i personaggi presenti nel
gioco rientrano nelle seguenti categorie: Maghi, Docenti, Studenti, Mostri, Animali e Oggetti
incantati. Tutti i personaggi hanno un nome, possono parlare e muoversi, anche se ogni
Pag. 1
PDF created with FinePrint pdfFactory trial version http://www.fineprint.com
Laboratorio di Algoritmi e Strutture Dati
Anno Accademico 2002/2003
Prova del 18 febbraio 2003
personaggio ha un suo modo specifico di muoversi. Ogni personaggio ha un insieme di frasi che
può pronunciare. I Maghi, che sono o Docenti o Studenti della scuola, possono lanciare
incantesimi, afferrare oggetti incantati e volare su una scopa. I Mostri e gli Animali possono
aggredire altri personaggi del gioco; inoltre, i Mostri hanno delle armi con cui combattere.
[5 punti] Disegnare il grafo di derivazione delle classi che implementano i personaggi del gioco;
[2 punti] specificare quali classi del grafo sono astratte e quali, invece, sono concrete;
[8 punti] dare la definizione della classe base.
4. Ricerca in ampiezza in un grafo.
4.1 Illustrare il problema della ricerca in ampiezza in un grafo (BFS). [3 punti]
4.2 Codificare l’algoritmo BFS in C++ facendo uso della libreria LEDA. [10 punti]
4.3. Indicare, giustificando la risposta, la complessità dell’algoritmo codificato. [7 punti]
Pag. 2
PDF created with FinePrint pdfFactory trial version http://www.fineprint.com