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