• Non ci sono risultati.

edges * read_graph(int n

N/A
N/A
Protected

Academic year: 2021

Condividi "edges * read_graph(int n"

Copied!
2
0
0

Testo completo

(1)

#include <stdio.h>

#include <stdlib.h>

typedef struct _edges { int grado;

int * adiacenti;

} edges;

edges * read_graph(int n) { int i,g,j;

edges * E = malloc(n * sizeof(edges));

for(i=0; i<n; i++) { scanf("%d",&g);

E[i].grado = g;

E[i].adiacenti = malloc(E[i].grado * sizeof(int));

for(j=0; j<g; j++) {

scanf("%d",E[i].adiacenti+j);

} }

return E;

}

int dfs(edges * E, int s, int * colore) { int i, v;

for(i = 0; i<E[s].grado; i++) { v = E[s].adiacenti[i];

if(colore[v] == 0) {

colore[v] = -colore[s];

if(dfs(E, v, colore) == 0) return 0;

}

else if (colore[s] == colore[v]) return 0;

}

return 1;

}

int bipartito(edges * E, int n) { int i;

int * colore = malloc(n*sizeof(int));

for(i=0; i<n; i++) colore[i] = 0;

for(i=0; i<n; i++) {

if(colore[i] == 0) { colore[i] = 1;

if(dfs(E, i, colore) == 0) { free(colore);

return 0;

} }

}

return 1;

}

int main() {

int n, i;

(2)

scanf("%d",&n);

edges * E = read_graph(n);

printf("%d", bipartito(E,n));

for (i = 0; i < n; i++) free(E[i].adiacenti);

free(E);

return 0;

}

Riferimenti

Documenti correlati

[r]

[r]

Determinare gli estremanti assoluti di f in Γ utilizzando il metodo dei moltiplicatori di

[r]

[r]

[r]

Scrivere un metodo ricorsivo che, dati un array bidimensionale di interi a ed un intero n, restituisce true se n compare in a, false altrimenti. public static boolean

Si assuma che l’input contenga un grafo indiretto, e quindi che per 11 ciascun arco da i a j esiste anche l’arco da j ad i.. 12 Un grafo è connesso quando esiste un percorso tra