• Non ci sono risultati.

Laboratorio di Algoritmi e Strutture DatiLaboratorio di Algoritmi e Laboratorio di Algoritmi e Strutture DatiStrutture Dati

N/A
N/A
Protected

Academic year: 2021

Condividi "Laboratorio di Algoritmi e Strutture DatiLaboratorio di Algoritmi e Laboratorio di Algoritmi e Strutture DatiStrutture Dati"

Copied!
2
0
0

Testo completo

(1)

1

Murano Aniello - Lab. di ASD

Nona e Decima Lezione - Mod.B 1

Laboratorio di Algoritmi e Strutture Dati

Laboratorio di Algoritmi e Laboratorio di Algoritmi e

Strutture Dati Strutture Dati

Aniello Murano Aniello Murano http://

http://people.na.infn.it people.na.infn.it/ /~murano ~murano/ /

Murano Aniello - Lab. di ASD

Nona e Decima Lezione - Mod.B 2

Esercitazione di laboratorio:

Esercitazione di laboratorio:

Problemi su grafi

Problemi su grafi

(2)

2

Murano Aniello - Lab. di ASD

Nona e Decima Lezione - Mod.B 3

Primo esercizio

Siano G e H due grafi orientati pesati di n vertici 0,1,…, n-1 rappresentati con liste di adiacenza utilizzando la seguente struttura:

scrivere in linguaggio C una funzione che restituisca un nuovo grafo T unione dei due grafi G e H, rappresentato con liste di adiacenza, secondo la struttura dati graph definita sopra. In pratica, T avrà tutti i vertici di G e H e conterrà un arco da un nodo i a un nodo j se tale arco è presente almeno in uno dei due grafi G e H, Per ogni arco aggiunto in T, se l’arco è presente solo in uno dei due grafi, allora l’arco erediterà il peso dell’arco presente nel grafo di partenza. Se invece l’arco è presente in entrambi i grafi G e H, allora il suo peso sarà il minore tra i due pesi associati all’arco nei due grafi di partenza.

typedef struct edge { int key;

struct edge *next; } edge;

typedef struct graph { int nv;

edge **adj; } graph;

graph *G, *H;

Murano Aniello - Lab. di ASD

Nona e Decima Lezione - Mod.B 4

Secondo esercizio

Si consideri un grafo G orientato non pesato di n vertici 0,1,…,n-1, rappresentato con liste di adiacenza secondo la struttura definita nel primo esercizio. Si scriva in linguaggio C una funzione che prenda in input il grafo G rappresentato con liste di adiacenza e restituisca un grafo T rappresentato con matrice di adiacenza. In pratica, la matrice T dovrà avere dimensione n x n e dovrà essere riempita utilizzando la seguente regola:

per ogni vertice i, j< n,

G[i][j]=1 se esiste un arco da i a j in G e 0 altrimenti.

Riferimenti

Documenti correlati

In pratica, modellando la cartina dell’Italia come un grafo orientato pesato G=(V, E), dove ciascun vertice rappresenta una città, ogni arco (u,v) rappresenta una strada diretta da

Matrici di adiacenza: se l elemento di indici i, j della matrice di adiacenza è un valore diverso da 0 esso è il peso dell arco (i,j), altrimenti non esiste un arco fra i nodi i e

Scrivere in linguaggio C un programma che implementi le operazioni precedenti indipendentemente dal fatto che la struttura dati di appoggio sia un grafo

L’inizio della coda è rappresentato dalla prima persona della fila (quella la prossima ad essere servita), mentre la fine della coda è rappresentata dall’ultima persona che si

Infine, se la lista è doppiamente puntata, il puntatore prev della testa della lista punta all’elemento in coda

lista.h deve includere la definizione della struttura dati a puntatori (lista semplice non circolare) e i soli prototipi delle funzioni implementate in lista.c. Dunque, per

Un albero binario è una tipo astratto di dato che o è vuoto (cioè ha un insieme vuoto di nodi) o è formato da un nodo A (detto la radice) e da due sottoalberi, che sono a loro

Riversamento dei dati contenuti nell’heap nell’albero binario di ricerca utilizzando una visita lineare dell’array. Stampare i dati contenuti nell’albero binario di