La parte di programma sui grafi è trattata in modo esauriente sul libro. Queste pagine contengono soltanto il programma di generazione e salvataggio su file di un grafo random, e la lettura di un grafo da file.
TipoGrafo LeggiGrafoFileMatrice(char *nomefile) {
TipoGrafo g;
FILE *fd;
int i, j;
int x, res;
g=InitGrafo();
fd=fopen(nomefile, "r");
if(fd==NULL) {
perror("Errore in apertura del file grafo");
exit(1);
}
for(i=0; i<=NUMNODI-1; i++)
for(j=0; j<=NUMNODI-1; j++) {
res=fscanf(fd, "%d", &x);
if(res!=1)
return g;
if(x)
g=InserArco(g, i, j);
}
return g;
}
Notare che questa funzione, dal momento che usa
solo le operazioni fondamentali sui grafi, è
corretta sia se TipoGrafo è la
matrice di adicenza, sia nel caso in cui TipoGrafo
è definito come vettore delle liste di successori.
Quindi, anche se il file contiene la matrice di
adiacenza del grafo, il risulato della funzione
è comunque il grafo rappresentato in base
alla definizione data dal tipo TipoGrafo,
che può essere sia matrice di adiacenza
che liste di successori.
bool VerificaCammino(TipoGrafo g, TipoLista l) {
if(l==NULL)
return TRUE;
if(l->val>NUMNODI-1 || l->val<0)
return FALSE;
if(l->next==NULL)
return TRUE;
while(l->next!=NULL) {
if(!TestEsisteArco(g, l->val, l->next->val))
return FALSE;
l=l->next;
}
return TRUE;
}