Laboratorio di Algoritmi e Strutture Dati Anno Accademico 2001/2002 Prova di Esercitazione Scritta del 18 febbraio 2002 Cognome e Nome: Numero di Matricola: Spazio riservato alla correzione 1 2 3 4 totale /28 /10 /12 /50 /100 Non usare altri fogli, usare solo lo spazio sottostante. Fogli differenti da questo non saranno presi in considerazione per la correzione. 1. [25 punti] Definire la classe modello Coda, derivandola dalla classe slist di LEDA. L'interfaccia pubblica della classe Coda deve contenere, oltre a costruttori, distruttori e operatori di assegnamento, i seguenti metodi: top() //lettura elemento dal front della coda pop() //lettura ed estrazione elemento dal front della coda append(T val) //inserimento elemento val nella coda size() // restituisce il numero di elementi contenuti nella coda empty() //controllo su condizione di coda vuota clear() //cancellazione di tutti gli elementi contenuti nella coda 2. [10 punti] Eseguire l’algoritmo di Prim sul grafo dato in figura a partire dal nodo S. Mostrare l’albero costruito dall’algoritmo ad ogni passo. 7 4 5 A S 10 2 4 V T 6 3 11 L 9 15 P 1 Z 10 Q 13 11 R I 5 4 12 Pag. 1 PDF created with FinePrint pdfFactory trial version http://www.fineprint.com Laboratorio di Algoritmi e Strutture Dati Anno Accademico 2001/2002 Prova di Esercitazione Scritta del 18 febbraio 2002 3. [12 punti] 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 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; [5 punti] dare la definizione della classe base. 4. [50 punti] L'ufficio di coordinamento della polizia ha il compito di coordinare l'attività delle varie forze di polizia che operano sul territorio. In caso di ricerca di individui pericolosi l'ufficio ha il compito di individuare la localizzazione dei posti di blocco necessari ad impedire che i ricercati riescano a lasciare il territorio nazionale. Progettare un algoritmo che fissato i luogo in cui sono stati localizzati gli individui da ricercare (ad esempio si sa che una determinata persona è presente in una data città) individui i luoghi dove posizionare i posti di blocco necessari ad impedire l'espatrio. Progettare ed implementare un programma C++ che data la segnalazione della presenza di individui pericolosi in alcune cittàcalcola il minimo numero di posti di blocco necessari per tagliare tutte le vie di fuga dal territorio nazionale dei ricercati. Il programma deve inoltre fornire una lista di città dove posizionare i posti di blocco. Formato dell'input. Il territorio nazionale è rappresentato come un grafo i cui nodi sono le città e gli archi i collegamenti, stradali o di latro genere, tra le città. Tale grafo è contenuto nel file MAPPA passato in input al programma. Il file FRONTIERE, invece, contiene la lista delle cittàdove sono presenti posti di frontiera; mentre, il file RICERCATI contiene la lista dei ricercati ed i luoghi (città) dove si ritiene che essi siano nascosti. Formato dell'output. Il programma calcola il numero di posti di blocco e restituisce la lista delle città in cui bisogna posizionarli. [20 punti] Descrivere l'implementazione del programma spiegando quali strutture dati e quale algoritmo si intendono utilizzare per risolvere il problema. In particolare, spiegare come si intende rappresentare il problema attraverso strutture dati. Giustificare tutte le affermazioni. Pag. 2 PDF created with FinePrint pdfFactory trial version http://www.fineprint.com Laboratorio di Algoritmi e Strutture Dati Anno Accademico 2001/2002 Prova di Esercitazione Scritta del 18 febbraio 2002 [25 punti] Progettare ed implementare una funzione C++ che data la segnalazione della presenza di individui pericolosi in alcune cittàcalcola il minimo numero di posti di blocco necessari per tagliare tutte le vie di fuga dal territorio nazionale dei ricercati. Il programma deve inoltre fornire una lista di cittàdove posizionare i posti di blocco. [5 punti] Analizzare, giustificando tutte le affermazioni, la complessitàdella soluzione proposta. Pag. 3 PDF created with FinePrint pdfFactory trial version http://www.fineprint.com