Esercizio 1. Esercizio 2

Documenti analoghi
ESERCIZI SULLA TECNICA BACKTRACKING e BRANCH & BOUND

Introduzione ai grafi. Introduzione ai grafi p. 1/2

Problemi, istanze, soluzioni

Introduzione ai grafi. Introduzione ai grafi p. 1/2

ESERCIZI SULLA TECNICA Greedy

Parte 1: tipi primitivi e istruzioni C

Laboratorio di Algoritmi e Strutture Dati

1 TEORIA DELLE RETI 1. 1 Teoria delle reti. 1.1 Grafi

Esercizi svolti a lezione

Massimo flusso e matching

GARA SECONDARIA DI PRIMO GRADO INDIVIDUALE

Laboratorio di Algoritmi e Strutture Dati

PREVISIONI IN CHIAVE NUMERICA. Ruote. Terzine per ambo VALIDE DALL ESTRAZIONE DEL 05/11/2013. sabato 16/11/2013

algoritmi e strutture di dati

Algoritmi e Strutture Dati. Capitolo 13 Cammini minimi: Algoritmo di Bellman e Ford

Esercizi Union-Find e su Grafi. Ugo Vaccaro

UNIVERSITÀ DEGLI STUDI ROMA TRE Collegio Didattico in Ingegneria Informatica corso di Ricerca operativa 2. Esercizi sul problema dell assegnamento

Fondamenti teorici e programmazione

Makespan con set-up dipendenti dalla sequenza. 1/s jk /C max

Laboratorio di Algoritmi

Il problema del commesso viaggiatore

Terzo allenamento. Olimpiadi Italiane di Informatica - Selezione territoriale

Note per la Lezione 21 Ugo Vaccaro

Esercitazione 7. Grafi. Rappresentazione e algoritmi di visita

Laboratorio di Algoritmi

Figura 1: 1) Si scriva la formulazione del problema come problema di PLI (con un numero minimo di vincoli) e la matrice dei vincoli.

Macchine sequenziali. Automa a Stati Finiti (ASF)

Certificati dei problemi in NP

Quarto allenamento. Olimpiadi Italiane di Informatica - Selezione territoriale

Esercizi in Python. Docente: Domenico Daniele Bloisi

Esercizio. 2 i=i*2) j=j*2)

Laboratorio di Algoritmi

Laboratorio di Programmazione

A-2 a PI. Esercizio 2. Domanda 3

I tipi strutturati e i record in C++

Automa a Stati Finiti (ASF)

Grafi diretti. Un grafo diretto (o grafo orientato) G è una coppia (V,E) dove. V è u n i n s i e m e d i nodi (o vertici);

Matrici unimodulari e totalmente unimodulari

GRAFI. Cosa sono Grafi non orientati Grafi orientati Grafi pesati Alberi Automi!

Richiami di matematica discreta: grafi e alberi. Paolo Camurati Dip. Automatica e Informatica Politecnico di Torino

Problemi intrattabili

ALBERI ORIENTATI. Definizione: Albero orientato = rooted tree = grafo orientato con le seguenti proprietà: - ha un nodo fissato, detto radice (r);

2 OTTIMIZZAZIONE SU GRAFI. E. Amaldi Fondamenti di R.O. Politecnico di Milano 1

Teoria dei Grafi Elementi di base della Teoria dei Grafi

1) Data la seguente istanza di TSP (grafo completo con 5 nodi): c 12 = 52; c 13 = 51; c 14 = 40; c 15 = 53; c 23 = 44;

Algoritmi greedy. Gli algoritmi che risolvono problemi di ottimizzazione devono in genere operare una sequenza di scelte per arrivare alla soluzione

Esercizi proposti 10

Politecnico di Torino

- Esercitazione III Programmazione C Funzioni Alessandro Saetti

Algoritmi e Strutture di Dati

Grafi: introduzione. Definizioni: che cosa sono i grafi. Definizione

Algoritmi e Strutture Dati

Bioinformatica. Grafi. a.a Francesca Cordero. Grafi Bioinformatica

Soluzioni della settima esercitazione di Algoritmi 1

min det det Allora è unimodulare se e solo se det 1, 1, 0 per ogni sottomatrice quadrata di di qualsiasi dimensione.

Automi e Linguaggi Formali

LABORATORIO DI INFORMATICA ESERCITAZIONE VIII

Laboratorio n 6 del Ing. Dario Cogliati

Laboratorio di Architettura degli Elaboratori A.A. 2016/17 Programmazione Assembly

Esercitazione. Esercizio 1 Scrivere un programma che calcoli e visualizzi la somma degli interi pari da 2 a 1000 (estremi compresi)

Teorema 1. Il problema AP è N P-complete.

GARA SECONDARIA DI PRIMO GRADO INDIVIDUALE

Corso di elettrotecnica Materiale didattico: i grafi

Introduzione ai grafi

Algoritmi e Strutture Dati. Capitolo 11 Visite di grafi

Fondamenti di Programmazione

11.4 Chiusura transitiva

Algoritmi greedy. Gli algoritmi che risolvono problemi di ottimizzazione devono in genere operare una sequenza di scelte per arrivare alla soluzione

3.3 Problemi di PLI facili

LABORATORIO 7 ARRAY. ATTENZIONE: argomenti da linea di comando!!!

Somma 3-bit. somma 3-bit con I/O sequenziale. somma 3-bit con I/O sequenziale. Osservazione

Algoritmi e strutture dati

I/O avanzato e File Esercizi proposti

Preappello di metodi matematici per le decisioni economiche e aziendali A

1 3 x. UNIVERSITÀ DEGLI STUDI ROMA TRE Corso di Studi in Ingegneria Informatica Ricerca Operativa 1 Secondo appello 16 settembre 2004 SOLUZIONI

Gioco 10x10. Prova con una matita, che punteggio ottieni?

2 OTTIMIZZAZIONE SU GRAFI. E. Amaldi Fondamenti di R.O. Politecnico di Milano 1

Algoritmi e Strutture Dati (Mod. B) Algoritmi su grafi Ricerca in profondità (Depth-First Search) Parte II

Strutture dati per rappresentare grafi

ESERCIZIO allochi staticamente un vettore V1 di 10 float e allochi dinamicamente un vettore V2 di 10 double;

Grafi non orientati. Grafi (non orientati) Rappresentazione di Grafi: matrice delle adiacenze. Tipiche applicazioni di modelli basati su grafi

Esercizi di riepilogo (Fondamenti di Informatica 1 Walter Didimo)

Analisi e implementazione dell algoritmo di Dijkstra (Parte 1)

Laboratorio 26/09/2000

Progettazione di Algoritmi Anno Accademico Esercizi su Grafi: Parte Prima

Esercizi per il corso di Algoritmi, anno accademico 2011/12

Calcolo su Polinomi ===================

3 CENNI DI TEORIA DELLA COMPLESSITA COMPUTAZIONALE. E. Amaldi Fondamenti di R.O. Politecnico di Milano 1

PROGRAMMAZIONE: ESERCITAZIONE N. 6

06AZN - Fondamenti di Informatica (GES, LOP, ORG) Esercitazione di laboratorio n. 8 (1/12/09)

INFORMATICA. Strutture iterative

ESERCIZIO 1: Punto 1

Definizione 1.3 (Arco accoppiato) Un arco è accoppiato se è appartenente al matching M.

Esercitazione 6 Algorithmi e Strutture Dati (Informatica) A.A 2015/2016

Problemi intrattabili, classi P e NP. Problemi intrattabili, classi P e NP

Risoluzione di un problema di VRP

Transcript:

Esercizio 1 Si scriva un programma C che realizza l'assegnazione ottima di un insieme di persone ad un insieme di città avente la stessa cardinalità. Ogni persona ha espresso una serie di preferenze, elencando in ordine di preferenza decrescente le città disponibili. Il programma trova l'assegnazione che rispetta nel modo complessivamente migliore le preferenze espresse. Si supponga che il numero di persone (e di città) sia pari a 10. Il programma esegue le seguenti operazioni: Legga da tastiera le preferenze di ogni persona, sotto forma di 10 righe, ciascuna composta da 10 interi. Il primo numero sulla riga i-esima rappresenta l'indice della città più "desiderata" dalla persona i-esima, l'ultimo l'indice della città meno desiderata. Calcola l'abbinamento ottimale, ossia quello che massimizza la funzione A = Σ f(i), dove f(i) è una funzione che per la persona i-esima vale 10 se la persona è stata assegnata alla città più desiderata, 9 se è stata assegnata alla città corrispondente alla seconda scelta, e così via, sino al caso in cui la persona è assegnata alla città meno desiderata (1). La sommatoria è estesa a tutte le 10 persone. Nel caso ottimo (non sempre possibile) la funzione A assume il valore 100. Visualizza l'abbinamento ottimo, stampando su video le 10 coppie di numeri (identificativo della persona, identificativo della città) che risultano dall'abbinamento. Supponendo per semplicità che il numero di persone (e di città) coinvolte sia 3 (e non 10), si ipotizzi che il programma legga le seguenti 3 righe 1 2 3 1 3 2 2 3 1 L'abbinamento ottimale è persona 1 nella città 1, persona 2 nella città 3, perswona 3 nella città 2. Per tale abbinamento la funzione A assume il valore 8). Il programma visualizza quindi 1 1 2 3 3 2 Esercizio 2 Si scriva un programma C che determini quali monete devono essere rilasciate da una macchina per il caffè per restituire una cifra prefissata. Il programma riceve come ingresso da tastiera La cifra totale che la macchina deve rilasciare, compresa tra 50 e 1000 Le monete disponibili, nei tagli da 5, 10, 25, 50, 100, ciascuno nel formato <Valore> <numero_monete_disponibili> 1

Il programma produce su video la soluzione, corrispondente ad una serie di righe con il formato <valore> <numero_monete> Si faccia in modo che il programma calcoli e visualizzi la soluzione ottima, corrispondente al numero minimo di monete. Il programma acquisisce da tastiera 85 5 8 10 13 25 7 50 10 100 0 Il programma produce come soluzione ottima 10 1 25 3 Esercizio 3 Si scriva un programma C che gestisca la ripartizione di un insieme di oggetti tra un gruppo di bidoni. un file contiene la descrizione degli oggetti, ciascuno dei quali è identificato da un nome (una stringa senza spazi) e da un peso (numero intero tra 1 e 1000). Gli oggetti sono elencati uno per riga, mentre la prima riga del file contiene il numero totale di oggetti. il programma riceve da tastiera un numero intero che indica la portata di ciascun bidone. Il programma deve stampare su video una possibile disposizione degli oggetti nei bidoni, facendo sì che tutti gli oggetti vengano considerati, e che il peso complessivo degli oggetti in ciascun bidone non superi la relativa portata. L output su video deve essere simile al seguente: Il bidone n. 1 contiene: martello (peso 1), incudine (peso 100) Il bidone n. 2 contiene: staffa (peso 10), alabarda (peso 50) ecc ecc Si faccia in modo che il programma calcoli e stampi la disposizione ottima degli oggetti nei bidoni, ossia la disposizione che, rispettando i vincoli già citati, utilizzi il minimo numero di bidoni. 2

Esercizio 4 Si scriva un programma C che risolva il problema del quadrato magico. Un quadrato magico di dimensione N è una matrice in cui sono presenti tutti e soli i numeri tra 1 e N 2, disposti in modo tale che la somma dei valori su tutte le righe è costante, ed è pari alla somma dei valori su tutte le colonne. Il programma legge da tastiera il numero N (compreso tra 3 e 10), trova un quadrato magico di dimensione N e lo visualizza. Il seguente è un quadrato magico di dimensione 3: 8 3 4 1 5 9 6 7 2 Esercizio 5 Si scriva un programma C che permetta dimuoversi all'interno di un labirinto. Il labirinto è composto da N stanze, ognuna delle quali ha al più 4 porte che la mettono in comunicazione ciascuna con un'altra stanza (o con l'esterno). Si assume che il mondo esterno (porte di entrata/uscita) corrisponda alla stanza 0. Il programma: Legge da un file (il cui nome viene specificato da tastiera) la descrizione del labirinto. Nella prima riga è scritto il numero N. Nelle N righe successive vi sono gli indici delle 4 stanze raggiungibili da ciascuna delle 4 porte della stanza. Se una porta è chiusa compare il valore 1. Acquisisce da tastiera l'indice della stanza da cui partire. Trova una sequenza di mosse che porta dalla stanza iniziale all uscita. Visualizza la sequenza di mosse. Per ogni mossa si visualizza il numero della stanza raggiunta. Per la descrizione interna del labirinto si utilizzi una struttura a matrice di adiacenza. Si assuma che il file di input abbia il seguente contenuto 6 0 2 1 1 1 3 4 1 2 4 5 1 5 6 2 3 6 4 3 1 0 4 5-1 corrispondente al labirinto della figura seguente. Si riporta di seguito una possibile sequenza di mosse, che parte dalla stanza 4 (il cui indice è stato acquisito da tastiera): 4 3

3 2 1 USCITA 6 5 4 3 2 1 Esercizio 6 Ad una cena vengono invitate n persone, che prendono posto ad un tavolo rotondo. Tra alcune di queste persone esistono rapporti di antipatia, ed il padrone di casa desidera trovare una sistemazione degli invitati attorno al tavolo tale per cui nessuno di essi si trovi vicino ad una persona a lui antipatica. Si scriva un programma C che esegua le seguenti operazioni: legga da un file (il cui nome deve venire acquisito da tastiera) l elenco delle coppie di persone tra cui esistono rapporti di antipatia; ciascuna persona è identificata da un numero; il file contiene nella prima riga il numero di persone invitate alla cena, ed in ciascuna delle righe successive i numeri corrispondenti a due persone tra le quali esiste un rapporto di antipatia; determini una possibile disposizione degli invitati attorno al tavolo, tale per cui nessuno sia vicino a persone con cui ha un rapporto di antipatia; visualizzi tale disposizione. Si consiglia di rappresentare internamente le relazioni di antipatia tra le persone tramite un grafo. Esercizio 7 Realizzare un programma per l analisi di grafi di dimensione arbitraria. Il programma deve leggere da file la descrizione di un grafo, il cui nome viene acquisito da tastiera, e fornire le seguenti informazioni: 4

Numero nodi e numero archi (totale) Densità totale (totale) Numero componenti connesse. Quindi, per ogni componente connessa: o Se la componente connessa è ciclica o Numero nodi e numero archi o Densità Il formato del file è il seguente: La prima linea contiene il numero dei vertici n Ciascuno dei successivi n blocchi di righe contiene (un informazione per riga): o Una riga contenente i caratteri *k dove k è il numero del vertice cui si riferisce il blocco o Il numero dei vertici adiacenti al vertice k o La lista dei vertici adiacenti Esercizio 8 Realizzare un programma per risolvere il problema del commesso viaggiatore (TSP). Il programma deve leggere da file un elenco di città nel formato: numero_città Città_1 latitudine longitudine Città_2 latitudine longitudine Città_3 latitudine longitudine Città_4 latitudine longitudine e calcolare il più breve ciclo hamiltoniano partendo dalla prima città. Al termine dell esecuzione, deve visualizzare i nomi delle città nel ciclo ed il costo totale. Il nome del file è passato come primo argomento sulla linea di comando, oppure acquisito da tastiera. Osservazioni: Il problema è un calcolo del TSP su di un grafo completo, non ordinato e pesato. I pesi degli archi corrispondono alla distanza fra i vertici. I nomi delle città non contengono spazi. Latitudine e longitudine sono interi, ma la distanza è di tipo double. : % tsp2 tsp2-11-real.dat 00) Torino 01) Genova 02) Firenze 03) Roma 04) Napoli 05) Palermo 06) Catania 5

07) Bari 08) Venezia 09) Bologna 10) Milamo 11) Torino Weight: 2883.43 Esercizio 9 Realizzare un programma per calcolare cicli su grafi orientati, pesati, non completi. Il programma deve leggere da file la descrizione di un grafo, il cui nome è passato come primo argomento sulla linea di comando, e, dati due vertici v 1 e v 2, calcolare il ciclo di peso minimo che li includa entrambi. (suggerimento: cercare il percorso di peso minimo che parte da v 1, arriva a v 2 e ritorna a v 1, senza passare due volte dallo stesso nodo). Il formato del file è quello utilizzato per l esercitazione 7: La prima linea contiene il numero dei vertici n Ciascuno dei successivi n blocchi di righe contiene (un informazione per riga): o Una riga contenente i caratteri *k dove k è il numero del vertice cui si riferisce il blocco o Il numero dei vertici adiacenti al vertice k o La lista dei vertici adiacenti ed il peso dell arco corrispondente : Nel grafo descritto nel file tsp-200-50.dat, il ciclo di peso minimo che contiene il vertice 0 ed il vertice 1 è: 0 22 78 73 142 1 0 6