Roberto Trani
roberto.trani@di.unipi.it
Lezione 12 Grafi
Pagina web del corso
http://didawiki.cli.di.unipi.it/doku.php/informatica/all-b/start
Grafi
0
1 2
3 4
5
Matrice di adiacenza
0
1 2
3
4
5
Matrice di adiacenza
M
0 1 0
0 0 0
0 0 0 0
0 1
0 0 0
0 1 0
0 1 0
0 1 0
1
0 0 0
0 0
1
0 0
1
0 0
0
1 2
3
4
0 1 2 3 4 5
5
1 0
2
3
4
5
Matrice di adiacenza
M
0 1 0
0 0 0
0 0 0 0
0 1
0 0 0
0 1 0
0 1 0
0 1 0
1
0 0 0
0 0
1
0 0
1
0 0
0
1 2
3
4 5
int ** M = (int **) malloc(N*sizeof(int *));
for (int i=0; i<N; ++i) {
M[i] = (int *) malloc(N*sizeof(int));
}
Matrice di adiacenza
M
0 1 0
0 0 0
0 0 0 0
0 1
0 0 0
0 1 0
0 1 0
0 1 0
1
0 0 0
0 0
1
0 0
1
0 0
0
1 2
3
4 5
int ** M = (int **) malloc(N*sizeof(int *));
for (int i=0; i<N; ++i) {
M[i] = (int *) malloc(N*sizeof(int));
}
Troppi zeri…
Liste di adiacenza
0
1 2
3
4
5
Liste di adiacenza
E
0
1 2
3
4
5
Liste di adiacenza
E
5 /
0
1 2
3
4
5
Liste di adiacenza
E
0 3 4 /
5 /
0
1 2
3
4
5
Liste di adiacenza
E
0 3 4 /
5 /
/
0
1 2
3
4
5
Liste di adiacenza
E
0 3 4 /
4 5 /
5 /
/
0
1 2
3
4
5
Liste di adiacenza
E
0 3 4 /
4 5 /
5 /
2 /
/
0
1 2
3
4
5
Liste di adiacenza
E
0 3 4 /
4 5 /
5 /
2 /
0 /
/
0
1 2
3
4
5
Liste di adiacenza
E
0 3 4 /
4 5 /
5 /
2 /
typedef struct _edge { struct _edge * next;
int nodeid;
} edge;
edge ** E = (edge **) malloc(N*sizeof(edge *));
0 /
/
0
1 2
3
4 5
/* lista di adiacenza, ogni elemento nella lista rappresenta un arco */
/* array di N liste di adiacenza */
Liste di adiacenza
E
0 3 4 /
4 5 /
5 /
2 /
typedef struct _edge { struct _edge * next;
int nodeid;
} edge;
edge ** E = (edge **) malloc(N*sizeof(edge *));
0 /
/
0
1 2
3
4 5
Troppi salti in memoria…
Liste di adiacenza compatte
0
1 2
3
4
5
E
Liste di adiacenza compatte
5 1
0 3 4
3
4 5
2
2 1
0 /
1 0
0
1 2
3
4
5
E
Liste di adiacenza compatte
typedef struct _edges { int num_edges;
int * edges;
} edges;
edges *E = (edges *) malloc(N*sizeof(edges));
5 1
0 3 4
3
4 5
2
2 1
0 /
1 0
0
1 2
3
4 5
/* per ogni vertice v del grafo, la struct edges memorizza il grado (uscente) e l’array dei vertici
adiacenti a v (che rappresentano gli archi uscenti da v) */
// l’intero grafo è rappresentato tramite un array di edges
E
Liste di adiacenza compatte
typedef struct _edges { int num_edges;
int * edges;
} edges;
edges *E = (edges *) malloc(N*sizeof(edges));
5 1
0 3 4
3
4 5
2
2 1
0 /
1 0
0
1 2
3
4 5
I grafi dinamici possono essere realizzati usando vettori dinamici, o ridimensionabili
— algoritmo dimezza e raddoppia… —
Lettura grafo da input
Lettura grafo da input
Negli esercizi sarà richiesto di leggere un file avente il seguente formato:
Grafo bipartito
Esercizio
Scrivere un programma che legga da tastiera un grafo indiretto e stampi 1 se il grafo `e bipartito, 0 altrimenti. Il grafo `e rappresentato nel seguente formato: la prima riga contiene il numero n di nodi, le successive n righe contengono, per ciascun nodo i, con 0 i < n, il numero ni di archi uscenti da i seguito da una lista di ni nodi destinazione, rappresentati con i numeri [0, n). Si assuma che l’input contenga un grafo indiretto, e quindi che per ciascun arco da i a j esista anche l’arco da j ad i.
Un grafo bipartito `e un grafo tale che l’insieme dei suoi vertici si pu`o partizionare in due sottoinsiemi in cui ogni vertice `e collegato solo a vertici appartenenti alla partizione opposta.
Suggerimento: un grafo `e bipartito se e solo se `e possibile colorarlo usan- do due colori. Colorare il grafo corrisponde ad assegnare a ciascun vertice un colore diverso da quello dei suoi vertici adiacenti.
L’input `e costituito da:
• una riga contenente il numero n di nodi del grafo;
• n righe, una per ciasun nodo i, con i 2 [0, n), nel seguente formato:
– numero ni di archi uscenti da i;
– lista di ni nodi destinazione, rappresentati con i numeri [0, n).
L’output contiene una riga contenente 1 se il grafo `e bipartito, 0 altrimenti.
Esempio
Input
5 (numero di elementi)
2 1 3 3 0 2 4 2 1 3 3 0 2 4 2 1 3
Output 1
1
// grado di i
// vertici adiacenti a i
Lettura grafo da input
Negli esercizi sarà richiesto di leggere un file avente il seguente formato:
Grafo bipartito
Esercizio
Scrivere un programma che legga da tastiera un grafo indiretto e stampi 1 se il grafo `e bipartito, 0 altrimenti. Il grafo `e rappresentato nel seguente formato: la prima riga contiene il numero n di nodi, le successive n righe contengono, per ciascun nodo i, con 0 i < n, il numero ni di archi uscenti da i seguito da una lista di ni nodi destinazione, rappresentati con i numeri [0, n). Si assuma che l’input contenga un grafo indiretto, e quindi che per ciascun arco da i a j esista anche l’arco da j ad i.
Un grafo bipartito `e un grafo tale che l’insieme dei suoi vertici si pu`o partizionare in due sottoinsiemi in cui ogni vertice `e collegato solo a vertici appartenenti alla partizione opposta.
Suggerimento: un grafo `e bipartito se e solo se `e possibile colorarlo usan- do due colori. Colorare il grafo corrisponde ad assegnare a ciascun vertice un colore diverso da quello dei suoi vertici adiacenti.
L’input `e costituito da:
• una riga contenente il numero n di nodi del grafo;
• n righe, una per ciasun nodo i, con i 2 [0, n), nel seguente formato:
– numero ni di archi uscenti da i;
– lista di ni nodi destinazione, rappresentati con i numeri [0, n).
L’output contiene una riga contenente 1 se il grafo `e bipartito, 0 altrimenti.
Esempio
Input
5 (numero di elementi)
2 1 3 3 0 2 4 2 1 3 3 0 2 4 2 1 3
Output 1
1
Esempio:
6 1 5 3 0 3 4 0
2 4 5
1 2
1 0
Lettura grafo da input
Negli esercizi sarà richiesto di leggere un file avente il seguente formato:
Grafo bipartito
Esercizio
Scrivere un programma che legga da tastiera un grafo indiretto e stampi 1 se il grafo `e bipartito, 0 altrimenti. Il grafo `e rappresentato nel seguente formato: la prima riga contiene il numero n di nodi, le successive n righe contengono, per ciascun nodo i, con 0 i < n, il numero ni di archi uscenti da i seguito da una lista di ni nodi destinazione, rappresentati con i numeri [0, n). Si assuma che l’input contenga un grafo indiretto, e quindi che per ciascun arco da i a j esista anche l’arco da j ad i.
Un grafo bipartito `e un grafo tale che l’insieme dei suoi vertici si pu`o partizionare in due sottoinsiemi in cui ogni vertice `e collegato solo a vertici appartenenti alla partizione opposta.
Suggerimento: un grafo `e bipartito se e solo se `e possibile colorarlo usan- do due colori. Colorare il grafo corrisponde ad assegnare a ciascun vertice un colore diverso da quello dei suoi vertici adiacenti.
L’input `e costituito da:
• una riga contenente il numero n di nodi del grafo;
• n righe, una per ciasun nodo i, con i 2 [0, n), nel seguente formato:
– numero ni di archi uscenti da i;
– lista di ni nodi destinazione, rappresentati con i numeri [0, n).
L’output contiene una riga contenente 1 se il grafo `e bipartito, 0 altrimenti.
Esempio
Input
5 (numero di elementi)
2 1 3 3 0 2 4 2 1 3 3 0 2 4 2 1 3
Output 1
1
Esempio:
6 1 5 3 0 3 4 0
2 4 5
1 2
1 0
E
Lettura grafo da input
Negli esercizi sarà richiesto di leggere un file avente il seguente formato:
Grafo bipartito
Esercizio
Scrivere un programma che legga da tastiera un grafo indiretto e stampi 1 se il grafo `e bipartito, 0 altrimenti. Il grafo `e rappresentato nel seguente formato: la prima riga contiene il numero n di nodi, le successive n righe contengono, per ciascun nodo i, con 0 i < n, il numero ni di archi uscenti da i seguito da una lista di ni nodi destinazione, rappresentati con i numeri [0, n). Si assuma che l’input contenga un grafo indiretto, e quindi che per ciascun arco da i a j esista anche l’arco da j ad i.
Un grafo bipartito `e un grafo tale che l’insieme dei suoi vertici si pu`o partizionare in due sottoinsiemi in cui ogni vertice `e collegato solo a vertici appartenenti alla partizione opposta.
Suggerimento: un grafo `e bipartito se e solo se `e possibile colorarlo usan- do due colori. Colorare il grafo corrisponde ad assegnare a ciascun vertice un colore diverso da quello dei suoi vertici adiacenti.
L’input `e costituito da:
• una riga contenente il numero n di nodi del grafo;
• n righe, una per ciasun nodo i, con i 2 [0, n), nel seguente formato:
– numero ni di archi uscenti da i;
– lista di ni nodi destinazione, rappresentati con i numeri [0, n).
L’output contiene una riga contenente 1 se il grafo `e bipartito, 0 altrimenti.
Esempio
Input
5 (numero di elementi)
2 1 3 3 0 2 4 2 1 3 3 0 2 4 2 1 3
Output 1
1
Esempio:
6 1 5 3 0 3 4 0
2 4 5
1 2
1 0
E
Lettura grafo da input
Negli esercizi sarà richiesto di leggere un file avente il seguente formato:
Grafo bipartito
Esercizio
Scrivere un programma che legga da tastiera un grafo indiretto e stampi 1 se il grafo `e bipartito, 0 altrimenti. Il grafo `e rappresentato nel seguente formato: la prima riga contiene il numero n di nodi, le successive n righe contengono, per ciascun nodo i, con 0 i < n, il numero ni di archi uscenti da i seguito da una lista di ni nodi destinazione, rappresentati con i numeri [0, n). Si assuma che l’input contenga un grafo indiretto, e quindi che per ciascun arco da i a j esista anche l’arco da j ad i.
Un grafo bipartito `e un grafo tale che l’insieme dei suoi vertici si pu`o partizionare in due sottoinsiemi in cui ogni vertice `e collegato solo a vertici appartenenti alla partizione opposta.
Suggerimento: un grafo `e bipartito se e solo se `e possibile colorarlo usan- do due colori. Colorare il grafo corrisponde ad assegnare a ciascun vertice un colore diverso da quello dei suoi vertici adiacenti.
L’input `e costituito da:
• una riga contenente il numero n di nodi del grafo;
• n righe, una per ciasun nodo i, con i 2 [0, n), nel seguente formato:
– numero ni di archi uscenti da i;
– lista di ni nodi destinazione, rappresentati con i numeri [0, n).
L’output contiene una riga contenente 1 se il grafo `e bipartito, 0 altrimenti.
Esempio
Input
5 (numero di elementi)
2 1 3 3 0 2 4 2 1 3 3 0 2 4 2 1 3
Output 1
1
Esempio:
6 1 5 3 0 3 4 0
2 4 5
1 2
1 0
E
Lettura grafo da input
1
Negli esercizi sarà richiesto di leggere un file avente il seguente formato:
Grafo bipartito
Esercizio
Scrivere un programma che legga da tastiera un grafo indiretto e stampi 1 se il grafo `e bipartito, 0 altrimenti. Il grafo `e rappresentato nel seguente formato: la prima riga contiene il numero n di nodi, le successive n righe contengono, per ciascun nodo i, con 0 i < n, il numero ni di archi uscenti da i seguito da una lista di ni nodi destinazione, rappresentati con i numeri [0, n). Si assuma che l’input contenga un grafo indiretto, e quindi che per ciascun arco da i a j esista anche l’arco da j ad i.
Un grafo bipartito `e un grafo tale che l’insieme dei suoi vertici si pu`o partizionare in due sottoinsiemi in cui ogni vertice `e collegato solo a vertici appartenenti alla partizione opposta.
Suggerimento: un grafo `e bipartito se e solo se `e possibile colorarlo usan- do due colori. Colorare il grafo corrisponde ad assegnare a ciascun vertice un colore diverso da quello dei suoi vertici adiacenti.
L’input `e costituito da:
• una riga contenente il numero n di nodi del grafo;
• n righe, una per ciasun nodo i, con i 2 [0, n), nel seguente formato:
– numero ni di archi uscenti da i;
– lista di ni nodi destinazione, rappresentati con i numeri [0, n).
L’output contiene una riga contenente 1 se il grafo `e bipartito, 0 altrimenti.
Esempio
Input
5 (numero di elementi)
2 1 3 3 0 2 4 2 1 3 3 0 2 4 2 1 3
Output 1
1
Esempio:
6 1 5 3 0 3 4 0
2 4 5
1 2
1 0
E
Lettura grafo da input
1
Negli esercizi sarà richiesto di leggere un file avente il seguente formato:
Grafo bipartito
Esercizio
Scrivere un programma che legga da tastiera un grafo indiretto e stampi 1 se il grafo `e bipartito, 0 altrimenti. Il grafo `e rappresentato nel seguente formato: la prima riga contiene il numero n di nodi, le successive n righe contengono, per ciascun nodo i, con 0 i < n, il numero ni di archi uscenti da i seguito da una lista di ni nodi destinazione, rappresentati con i numeri [0, n). Si assuma che l’input contenga un grafo indiretto, e quindi che per ciascun arco da i a j esista anche l’arco da j ad i.
Un grafo bipartito `e un grafo tale che l’insieme dei suoi vertici si pu`o partizionare in due sottoinsiemi in cui ogni vertice `e collegato solo a vertici appartenenti alla partizione opposta.
Suggerimento: un grafo `e bipartito se e solo se `e possibile colorarlo usan- do due colori. Colorare il grafo corrisponde ad assegnare a ciascun vertice un colore diverso da quello dei suoi vertici adiacenti.
L’input `e costituito da:
• una riga contenente il numero n di nodi del grafo;
• n righe, una per ciasun nodo i, con i 2 [0, n), nel seguente formato:
– numero ni di archi uscenti da i;
– lista di ni nodi destinazione, rappresentati con i numeri [0, n).
L’output contiene una riga contenente 1 se il grafo `e bipartito, 0 altrimenti.
Esempio
Input
5 (numero di elementi)
2 1 3 3 0 2 4 2 1 3 3 0 2 4 2 1 3
Output 1
1
Esempio:
6 1 5 3 0 3 4 0
2 4 5 1 2 1 0
5
E
Lettura grafo da input
1
Negli esercizi sarà richiesto di leggere un file avente il seguente formato:
Grafo bipartito
Esercizio
Scrivere un programma che legga da tastiera un grafo indiretto e stampi 1 se il grafo `e bipartito, 0 altrimenti. Il grafo `e rappresentato nel seguente formato: la prima riga contiene il numero n di nodi, le successive n righe contengono, per ciascun nodo i, con 0 i < n, il numero ni di archi uscenti da i seguito da una lista di ni nodi destinazione, rappresentati con i numeri [0, n). Si assuma che l’input contenga un grafo indiretto, e quindi che per ciascun arco da i a j esista anche l’arco da j ad i.
Un grafo bipartito `e un grafo tale che l’insieme dei suoi vertici si pu`o partizionare in due sottoinsiemi in cui ogni vertice `e collegato solo a vertici appartenenti alla partizione opposta.
Suggerimento: un grafo `e bipartito se e solo se `e possibile colorarlo usan- do due colori. Colorare il grafo corrisponde ad assegnare a ciascun vertice un colore diverso da quello dei suoi vertici adiacenti.
L’input `e costituito da:
• una riga contenente il numero n di nodi del grafo;
• n righe, una per ciasun nodo i, con i 2 [0, n), nel seguente formato:
– numero ni di archi uscenti da i;
– lista di ni nodi destinazione, rappresentati con i numeri [0, n).
L’output contiene una riga contenente 1 se il grafo `e bipartito, 0 altrimenti.
Esempio
Input
5 (numero di elementi)
2 1 3 3 0 2 4 2 1 3 3 0 2 4 2 1 3
Output 1
1
Esempio:
6 1 5 3 0 3 4 0
2 4 5 1 2 1 0
5
E
Lettura grafo da input
1 3
Negli esercizi sarà richiesto di leggere un file avente il seguente formato:
Grafo bipartito
Esercizio
Scrivere un programma che legga da tastiera un grafo indiretto e stampi 1 se il grafo `e bipartito, 0 altrimenti. Il grafo `e rappresentato nel seguente formato: la prima riga contiene il numero n di nodi, le successive n righe contengono, per ciascun nodo i, con 0 i < n, il numero ni di archi uscenti da i seguito da una lista di ni nodi destinazione, rappresentati con i numeri [0, n). Si assuma che l’input contenga un grafo indiretto, e quindi che per ciascun arco da i a j esista anche l’arco da j ad i.
Un grafo bipartito `e un grafo tale che l’insieme dei suoi vertici si pu`o partizionare in due sottoinsiemi in cui ogni vertice `e collegato solo a vertici appartenenti alla partizione opposta.
Suggerimento: un grafo `e bipartito se e solo se `e possibile colorarlo usan- do due colori. Colorare il grafo corrisponde ad assegnare a ciascun vertice un colore diverso da quello dei suoi vertici adiacenti.
L’input `e costituito da:
• una riga contenente il numero n di nodi del grafo;
• n righe, una per ciasun nodo i, con i 2 [0, n), nel seguente formato:
– numero ni di archi uscenti da i;
– lista di ni nodi destinazione, rappresentati con i numeri [0, n).
L’output contiene una riga contenente 1 se il grafo `e bipartito, 0 altrimenti.
Esempio
Input
5 (numero di elementi)
2 1 3 3 0 2 4 2 1 3 3 0 2 4 2 1 3
Output 1
1
Esempio:
6 1 5 3 0 3 4 0
2 4 5 1 2 1 0
5
E
Lettura grafo da input
1 3
Negli esercizi sarà richiesto di leggere un file avente il seguente formato:
Grafo bipartito
Esercizio
Scrivere un programma che legga da tastiera un grafo indiretto e stampi 1 se il grafo `e bipartito, 0 altrimenti. Il grafo `e rappresentato nel seguente formato: la prima riga contiene il numero n di nodi, le successive n righe contengono, per ciascun nodo i, con 0 i < n, il numero ni di archi uscenti da i seguito da una lista di ni nodi destinazione, rappresentati con i numeri [0, n). Si assuma che l’input contenga un grafo indiretto, e quindi che per ciascun arco da i a j esista anche l’arco da j ad i.
Un grafo bipartito `e un grafo tale che l’insieme dei suoi vertici si pu`o partizionare in due sottoinsiemi in cui ogni vertice `e collegato solo a vertici appartenenti alla partizione opposta.
Suggerimento: un grafo `e bipartito se e solo se `e possibile colorarlo usan- do due colori. Colorare il grafo corrisponde ad assegnare a ciascun vertice un colore diverso da quello dei suoi vertici adiacenti.
L’input `e costituito da:
• una riga contenente il numero n di nodi del grafo;
• n righe, una per ciasun nodo i, con i 2 [0, n), nel seguente formato:
– numero ni di archi uscenti da i;
– lista di ni nodi destinazione, rappresentati con i numeri [0, n).
L’output contiene una riga contenente 1 se il grafo `e bipartito, 0 altrimenti.
Esempio
Input
5 (numero di elementi)
2 1 3 3 0 2 4 2 1 3 3 0 2 4 2 1 3
Output 1
1
Esempio:
6 1 5 3 0 3 4 0
2 4 5 1 2 1 0
0 3 4
5
E
Lettura grafo da input
1 3
Negli esercizi sarà richiesto di leggere un file avente il seguente formato:
Grafo bipartito
Esercizio
Scrivere un programma che legga da tastiera un grafo indiretto e stampi 1 se il grafo `e bipartito, 0 altrimenti. Il grafo `e rappresentato nel seguente formato: la prima riga contiene il numero n di nodi, le successive n righe contengono, per ciascun nodo i, con 0 i < n, il numero ni di archi uscenti da i seguito da una lista di ni nodi destinazione, rappresentati con i numeri [0, n). Si assuma che l’input contenga un grafo indiretto, e quindi che per ciascun arco da i a j esista anche l’arco da j ad i.
Un grafo bipartito `e un grafo tale che l’insieme dei suoi vertici si pu`o partizionare in due sottoinsiemi in cui ogni vertice `e collegato solo a vertici appartenenti alla partizione opposta.
Suggerimento: un grafo `e bipartito se e solo se `e possibile colorarlo usan- do due colori. Colorare il grafo corrisponde ad assegnare a ciascun vertice un colore diverso da quello dei suoi vertici adiacenti.
L’input `e costituito da:
• una riga contenente il numero n di nodi del grafo;
• n righe, una per ciasun nodo i, con i 2 [0, n), nel seguente formato:
– numero ni di archi uscenti da i;
– lista di ni nodi destinazione, rappresentati con i numeri [0, n).
L’output contiene una riga contenente 1 se il grafo `e bipartito, 0 altrimenti.
Esempio
Input
5 (numero di elementi)
2 1 3 3 0 2 4 2 1 3 3 0 2 4 2 1 3
Output 1
1
Esempio:
6 1 5 3 0 3 4 0
2 4 5 1 2 1 0
0 3 4
5
E
Lettura grafo da input
1 3 0 /
Negli esercizi sarà richiesto di leggere un file avente il seguente formato:
Grafo bipartito
Esercizio
Scrivere un programma che legga da tastiera un grafo indiretto e stampi 1 se il grafo `e bipartito, 0 altrimenti. Il grafo `e rappresentato nel seguente formato: la prima riga contiene il numero n di nodi, le successive n righe contengono, per ciascun nodo i, con 0 i < n, il numero ni di archi uscenti da i seguito da una lista di ni nodi destinazione, rappresentati con i numeri [0, n). Si assuma che l’input contenga un grafo indiretto, e quindi che per ciascun arco da i a j esista anche l’arco da j ad i.
Un grafo bipartito `e un grafo tale che l’insieme dei suoi vertici si pu`o partizionare in due sottoinsiemi in cui ogni vertice `e collegato solo a vertici appartenenti alla partizione opposta.
Suggerimento: un grafo `e bipartito se e solo se `e possibile colorarlo usan- do due colori. Colorare il grafo corrisponde ad assegnare a ciascun vertice un colore diverso da quello dei suoi vertici adiacenti.
L’input `e costituito da:
• una riga contenente il numero n di nodi del grafo;
• n righe, una per ciasun nodo i, con i 2 [0, n), nel seguente formato:
– numero ni di archi uscenti da i;
– lista di ni nodi destinazione, rappresentati con i numeri [0, n).
L’output contiene una riga contenente 1 se il grafo `e bipartito, 0 altrimenti.
Esempio
Input
5 (numero di elementi)
2 1 3 3 0 2 4 2 1 3 3 0 2 4 2 1 3
Output 1
1
Esempio:
6 1 5 3 0 3 4 0
2 4 5 1 2 1 0
0 3 4
5
E
Lettura grafo da input
1 3 0 /
Negli esercizi sarà richiesto di leggere un file avente il seguente formato:
Grafo bipartito
Esercizio
Scrivere un programma che legga da tastiera un grafo indiretto e stampi 1 se il grafo `e bipartito, 0 altrimenti. Il grafo `e rappresentato nel seguente formato: la prima riga contiene il numero n di nodi, le successive n righe contengono, per ciascun nodo i, con 0 i < n, il numero ni di archi uscenti da i seguito da una lista di ni nodi destinazione, rappresentati con i numeri [0, n). Si assuma che l’input contenga un grafo indiretto, e quindi che per ciascun arco da i a j esista anche l’arco da j ad i.
Un grafo bipartito `e un grafo tale che l’insieme dei suoi vertici si pu`o partizionare in due sottoinsiemi in cui ogni vertice `e collegato solo a vertici appartenenti alla partizione opposta.
Suggerimento: un grafo `e bipartito se e solo se `e possibile colorarlo usan- do due colori. Colorare il grafo corrisponde ad assegnare a ciascun vertice un colore diverso da quello dei suoi vertici adiacenti.
L’input `e costituito da:
• una riga contenente il numero n di nodi del grafo;
• n righe, una per ciasun nodo i, con i 2 [0, n), nel seguente formato:
– numero ni di archi uscenti da i;
– lista di ni nodi destinazione, rappresentati con i numeri [0, n).
L’output contiene una riga contenente 1 se il grafo `e bipartito, 0 altrimenti.
Esempio
Input
5 (numero di elementi)
2 1 3 3 0 2 4 2 1 3 3 0 2 4 2 1 3
Output 1
1
Esempio:
6 1 5 3 0 3 4 0
2 4 5 1 2 1 0
0 3 4
5
E
Lettura grafo da input
1 3
2 0 /
Negli esercizi sarà richiesto di leggere un file avente il seguente formato:
Grafo bipartito
Esercizio
Scrivere un programma che legga da tastiera un grafo indiretto e stampi 1 se il grafo `e bipartito, 0 altrimenti. Il grafo `e rappresentato nel seguente formato: la prima riga contiene il numero n di nodi, le successive n righe contengono, per ciascun nodo i, con 0 i < n, il numero ni di archi uscenti da i seguito da una lista di ni nodi destinazione, rappresentati con i numeri [0, n). Si assuma che l’input contenga un grafo indiretto, e quindi che per ciascun arco da i a j esista anche l’arco da j ad i.
Un grafo bipartito `e un grafo tale che l’insieme dei suoi vertici si pu`o partizionare in due sottoinsiemi in cui ogni vertice `e collegato solo a vertici appartenenti alla partizione opposta.
Suggerimento: un grafo `e bipartito se e solo se `e possibile colorarlo usan- do due colori. Colorare il grafo corrisponde ad assegnare a ciascun vertice un colore diverso da quello dei suoi vertici adiacenti.
L’input `e costituito da:
• una riga contenente il numero n di nodi del grafo;
• n righe, una per ciasun nodo i, con i 2 [0, n), nel seguente formato:
– numero ni di archi uscenti da i;
– lista di ni nodi destinazione, rappresentati con i numeri [0, n).
L’output contiene una riga contenente 1 se il grafo `e bipartito, 0 altrimenti.
Esempio
Input
5 (numero di elementi)
2 1 3 3 0 2 4 2 1 3 3 0 2 4 2 1 3
Output 1
1
Esempio:
6 1 5 3 0 3 4 0
2 4 5 1 2 1 0
0 3 4
5
E
Lettura grafo da input
1 3
2 0 /
Negli esercizi sarà richiesto di leggere un file avente il seguente formato:
Grafo bipartito
Esercizio
Scrivere un programma che legga da tastiera un grafo indiretto e stampi 1 se il grafo `e bipartito, 0 altrimenti. Il grafo `e rappresentato nel seguente formato: la prima riga contiene il numero n di nodi, le successive n righe contengono, per ciascun nodo i, con 0 i < n, il numero ni di archi uscenti da i seguito da una lista di ni nodi destinazione, rappresentati con i numeri [0, n). Si assuma che l’input contenga un grafo indiretto, e quindi che per ciascun arco da i a j esista anche l’arco da j ad i.
Un grafo bipartito `e un grafo tale che l’insieme dei suoi vertici si pu`o partizionare in due sottoinsiemi in cui ogni vertice `e collegato solo a vertici appartenenti alla partizione opposta.
Suggerimento: un grafo `e bipartito se e solo se `e possibile colorarlo usan- do due colori. Colorare il grafo corrisponde ad assegnare a ciascun vertice un colore diverso da quello dei suoi vertici adiacenti.
L’input `e costituito da:
• una riga contenente il numero n di nodi del grafo;
• n righe, una per ciasun nodo i, con i 2 [0, n), nel seguente formato:
– numero ni di archi uscenti da i;
– lista di ni nodi destinazione, rappresentati con i numeri [0, n).
L’output contiene una riga contenente 1 se il grafo `e bipartito, 0 altrimenti.
Esempio
Input
5 (numero di elementi)
2 1 3 3 0 2 4 2 1 3 3 0 2 4 2 1 3
Output 1
1
Esempio:
6 1 5 3 0 3 4 0
2 4 5 1 2 1 0
0 3 4
5
4 5
E
Lettura grafo da input
1 3
2 0 /
Negli esercizi sarà richiesto di leggere un file avente il seguente formato:
Grafo bipartito
Esercizio
Scrivere un programma che legga da tastiera un grafo indiretto e stampi 1 se il grafo `e bipartito, 0 altrimenti. Il grafo `e rappresentato nel seguente formato: la prima riga contiene il numero n di nodi, le successive n righe contengono, per ciascun nodo i, con 0 i < n, il numero ni di archi uscenti da i seguito da una lista di ni nodi destinazione, rappresentati con i numeri [0, n). Si assuma che l’input contenga un grafo indiretto, e quindi che per ciascun arco da i a j esista anche l’arco da j ad i.
Un grafo bipartito `e un grafo tale che l’insieme dei suoi vertici si pu`o partizionare in due sottoinsiemi in cui ogni vertice `e collegato solo a vertici appartenenti alla partizione opposta.
Suggerimento: un grafo `e bipartito se e solo se `e possibile colorarlo usan- do due colori. Colorare il grafo corrisponde ad assegnare a ciascun vertice un colore diverso da quello dei suoi vertici adiacenti.
L’input `e costituito da:
• una riga contenente il numero n di nodi del grafo;
• n righe, una per ciasun nodo i, con i 2 [0, n), nel seguente formato:
– numero ni di archi uscenti da i;
– lista di ni nodi destinazione, rappresentati con i numeri [0, n).
L’output contiene una riga contenente 1 se il grafo `e bipartito, 0 altrimenti.
Esempio
Input
5 (numero di elementi)
2 1 3 3 0 2 4 2 1 3 3 0 2 4 2 1 3
Output 1
1
Esempio:
6 1 5 3 0 3 4 0
2 4 5 1 2 1 0
0 3 4
5
4 5
E
Lettura grafo da input
1 3
2 1 0 /
Negli esercizi sarà richiesto di leggere un file avente il seguente formato:
Grafo bipartito
Esercizio
Scrivere un programma che legga da tastiera un grafo indiretto e stampi 1 se il grafo `e bipartito, 0 altrimenti. Il grafo `e rappresentato nel seguente formato: la prima riga contiene il numero n di nodi, le successive n righe contengono, per ciascun nodo i, con 0 i < n, il numero ni di archi uscenti da i seguito da una lista di ni nodi destinazione, rappresentati con i numeri [0, n). Si assuma che l’input contenga un grafo indiretto, e quindi che per ciascun arco da i a j esista anche l’arco da j ad i.
Un grafo bipartito `e un grafo tale che l’insieme dei suoi vertici si pu`o partizionare in due sottoinsiemi in cui ogni vertice `e collegato solo a vertici appartenenti alla partizione opposta.
Suggerimento: un grafo `e bipartito se e solo se `e possibile colorarlo usan- do due colori. Colorare il grafo corrisponde ad assegnare a ciascun vertice un colore diverso da quello dei suoi vertici adiacenti.
L’input `e costituito da:
• una riga contenente il numero n di nodi del grafo;
• n righe, una per ciasun nodo i, con i 2 [0, n), nel seguente formato:
– numero ni di archi uscenti da i;
– lista di ni nodi destinazione, rappresentati con i numeri [0, n).
L’output contiene una riga contenente 1 se il grafo `e bipartito, 0 altrimenti.
Esempio
Input
5 (numero di elementi)
2 1 3 3 0 2 4 2 1 3 3 0 2 4 2 1 3
Output 1
1
Esempio:
6 1 5 3 0 3 4 0
2 4 5 1 2 1 0
0 3 4
5
4 5
E
Lettura grafo da input
1 3
2 1 0 /
Negli esercizi sarà richiesto di leggere un file avente il seguente formato:
Grafo bipartito
Esercizio
Scrivere un programma che legga da tastiera un grafo indiretto e stampi 1 se il grafo `e bipartito, 0 altrimenti. Il grafo `e rappresentato nel seguente formato: la prima riga contiene il numero n di nodi, le successive n righe contengono, per ciascun nodo i, con 0 i < n, il numero ni di archi uscenti da i seguito da una lista di ni nodi destinazione, rappresentati con i numeri [0, n). Si assuma che l’input contenga un grafo indiretto, e quindi che per ciascun arco da i a j esista anche l’arco da j ad i.
Un grafo bipartito `e un grafo tale che l’insieme dei suoi vertici si pu`o partizionare in due sottoinsiemi in cui ogni vertice `e collegato solo a vertici appartenenti alla partizione opposta.
Suggerimento: un grafo `e bipartito se e solo se `e possibile colorarlo usan- do due colori. Colorare il grafo corrisponde ad assegnare a ciascun vertice un colore diverso da quello dei suoi vertici adiacenti.
L’input `e costituito da:
• una riga contenente il numero n di nodi del grafo;
• n righe, una per ciasun nodo i, con i 2 [0, n), nel seguente formato:
– numero ni di archi uscenti da i;
– lista di ni nodi destinazione, rappresentati con i numeri [0, n).
L’output contiene una riga contenente 1 se il grafo `e bipartito, 0 altrimenti.
Esempio
Input
5 (numero di elementi)
2 1 3 3 0 2 4 2 1 3 3 0 2 4 2 1 3
Output 1
1
Esempio:
6 1 5 3 0 3 4 0
2 4 5 1 2 1 0
0 3 4
5
4 5
2
E
Lettura grafo da input
1 3
2 1 0 /
Negli esercizi sarà richiesto di leggere un file avente il seguente formato:
Grafo bipartito
Esercizio
Scrivere un programma che legga da tastiera un grafo indiretto e stampi 1 se il grafo `e bipartito, 0 altrimenti. Il grafo `e rappresentato nel seguente formato: la prima riga contiene il numero n di nodi, le successive n righe contengono, per ciascun nodo i, con 0 i < n, il numero ni di archi uscenti da i seguito da una lista di ni nodi destinazione, rappresentati con i numeri [0, n). Si assuma che l’input contenga un grafo indiretto, e quindi che per ciascun arco da i a j esista anche l’arco da j ad i.
Un grafo bipartito `e un grafo tale che l’insieme dei suoi vertici si pu`o partizionare in due sottoinsiemi in cui ogni vertice `e collegato solo a vertici appartenenti alla partizione opposta.
Suggerimento: un grafo `e bipartito se e solo se `e possibile colorarlo usan- do due colori. Colorare il grafo corrisponde ad assegnare a ciascun vertice un colore diverso da quello dei suoi vertici adiacenti.
L’input `e costituito da:
• una riga contenente il numero n di nodi del grafo;
• n righe, una per ciasun nodo i, con i 2 [0, n), nel seguente formato:
– numero ni di archi uscenti da i;
– lista di ni nodi destinazione, rappresentati con i numeri [0, n).
L’output contiene una riga contenente 1 se il grafo `e bipartito, 0 altrimenti.
Esempio
Input
5 (numero di elementi)
2 1 3 3 0 2 4 2 1 3 3 0 2 4 2 1 3
Output 1
1
Esempio:
6 1 5 3 0 3 4 0
2 4 5 1 2 1 0
0 3 4
5
4 5
2
E
Lettura grafo da input
1 3
2 1 0 /
1
Negli esercizi sarà richiesto di leggere un file avente il seguente formato:
Grafo bipartito
Esercizio
Scrivere un programma che legga da tastiera un grafo indiretto e stampi 1 se il grafo `e bipartito, 0 altrimenti. Il grafo `e rappresentato nel seguente formato: la prima riga contiene il numero n di nodi, le successive n righe contengono, per ciascun nodo i, con 0 i < n, il numero ni di archi uscenti da i seguito da una lista di ni nodi destinazione, rappresentati con i numeri [0, n). Si assuma che l’input contenga un grafo indiretto, e quindi che per ciascun arco da i a j esista anche l’arco da j ad i.
Un grafo bipartito `e un grafo tale che l’insieme dei suoi vertici si pu`o partizionare in due sottoinsiemi in cui ogni vertice `e collegato solo a vertici appartenenti alla partizione opposta.
Suggerimento: un grafo `e bipartito se e solo se `e possibile colorarlo usan- do due colori. Colorare il grafo corrisponde ad assegnare a ciascun vertice un colore diverso da quello dei suoi vertici adiacenti.
L’input `e costituito da:
• una riga contenente il numero n di nodi del grafo;
• n righe, una per ciasun nodo i, con i 2 [0, n), nel seguente formato:
– numero ni di archi uscenti da i;
– lista di ni nodi destinazione, rappresentati con i numeri [0, n).
L’output contiene una riga contenente 1 se il grafo `e bipartito, 0 altrimenti.
Esempio
Input
5 (numero di elementi)
2 1 3 3 0 2 4 2 1 3 3 0 2 4 2 1 3
Output 1
1
Esempio:
6 1 5 3 0 3 4 0
2 4 5 1 2 1 0
0 3 4
5
4 5
2
E
Lettura grafo da input
1 3
2 1 0 /
1
Negli esercizi sarà richiesto di leggere un file avente il seguente formato:
Grafo bipartito
Esercizio
Scrivere un programma che legga da tastiera un grafo indiretto e stampi 1 se il grafo `e bipartito, 0 altrimenti. Il grafo `e rappresentato nel seguente formato: la prima riga contiene il numero n di nodi, le successive n righe contengono, per ciascun nodo i, con 0 i < n, il numero ni di archi uscenti da i seguito da una lista di ni nodi destinazione, rappresentati con i numeri [0, n). Si assuma che l’input contenga un grafo indiretto, e quindi che per ciascun arco da i a j esista anche l’arco da j ad i.
Un grafo bipartito `e un grafo tale che l’insieme dei suoi vertici si pu`o partizionare in due sottoinsiemi in cui ogni vertice `e collegato solo a vertici appartenenti alla partizione opposta.
Suggerimento: un grafo `e bipartito se e solo se `e possibile colorarlo usan- do due colori. Colorare il grafo corrisponde ad assegnare a ciascun vertice un colore diverso da quello dei suoi vertici adiacenti.
L’input `e costituito da:
• una riga contenente il numero n di nodi del grafo;
• n righe, una per ciasun nodo i, con i 2 [0, n), nel seguente formato:
– numero ni di archi uscenti da i;
– lista di ni nodi destinazione, rappresentati con i numeri [0, n).
L’output contiene una riga contenente 1 se il grafo `e bipartito, 0 altrimenti.
Esempio
Input
5 (numero di elementi)
2 1 3 3 0 2 4 2 1 3 3 0 2 4 2 1 3
Output 1
1
Esempio:
6 1 5 3 0 3 4 0
2 4 5 1 2 1 0
0 3 4
5
4 5
2
0
E
Lettura grafo da input
1 3
2 1 0 /
1
Negli esercizi sarà richiesto di leggere un file avente il seguente formato:
Grafo bipartito
Esercizio
Scrivere un programma che legga da tastiera un grafo indiretto e stampi 1 se il grafo `e bipartito, 0 altrimenti. Il grafo `e rappresentato nel seguente formato: la prima riga contiene il numero n di nodi, le successive n righe contengono, per ciascun nodo i, con 0 i < n, il numero ni di archi uscenti da i seguito da una lista di ni nodi destinazione, rappresentati con i numeri [0, n). Si assuma che l’input contenga un grafo indiretto, e quindi che per ciascun arco da i a j esista anche l’arco da j ad i.
Un grafo bipartito `e un grafo tale che l’insieme dei suoi vertici si pu`o partizionare in due sottoinsiemi in cui ogni vertice `e collegato solo a vertici appartenenti alla partizione opposta.
Suggerimento: un grafo `e bipartito se e solo se `e possibile colorarlo usan- do due colori. Colorare il grafo corrisponde ad assegnare a ciascun vertice un colore diverso da quello dei suoi vertici adiacenti.
L’input `e costituito da:
• una riga contenente il numero n di nodi del grafo;
• n righe, una per ciasun nodo i, con i 2 [0, n), nel seguente formato:
– numero ni di archi uscenti da i;
– lista di ni nodi destinazione, rappresentati con i numeri [0, n).
L’output contiene una riga contenente 1 se il grafo `e bipartito, 0 altrimenti.
Esempio
Input
5 (numero di elementi)
2 1 3 3 0 2 4 2 1 3 3 0 2 4 2 1 3
Output 1
1