int main(void) { grafo g = le_grafo(stdin); long int d = diametro(g); printf("%s\n", nome(g)); printf("%sdirecionado\n", direcionado(g) ? "" : "não "); if ( direcionado(g) ) printf("%sfortemente conexo\n", fortemente_conexo(g) ? "" : "não "); else printf("%sconexo\n", conexo(g) ? "" : "des"); if ( d == infinito ) printf("diâmetro: oo\n"); else printf("diâmetro: %ld\n", d); destroi_grafo(escreve_grafo(stdout, distancias(g))); printf("\n"); return ! destroi_grafo(g); }
//------------------------------------------------------------------------------ long int diametro(grafo g) { long int diam; aresta_t a; vertice v; g = distancias(g); if (!g) { return -1; } diam = 0; for (v = g->vertice; v; v = v->next) { for (a = v->aresta; a; a = a->next) { if (a->peso > diam) { diam = a->peso; } } } return diam; }
//------------------------------------------------------------------------------ int main(void) { struct grafo *g, *d, *c; struct vertice *v; struct no *n; lista l; g = le_grafo(stdin); escreve_grafo(stdout, g); if((l = ordena(g)) != NULL) { for(n = primeiro_no(l); n != NULL; n = proximo_no(n)) { v = (struct vertice *) conteudo(n); fprintf(stdout, "%s\n", nome_vertice(v)); } destroi_lista(l, nao_destroi_nos); } if((l = componentes(g)) != NULL) { for(n = primeiro_no(l); n != NULL; n = proximo_no(n)) { c = (struct grafo *) conteudo(n); escreve_grafo(stdout, c); } destroi_lista(l, destroi_grafo); } d = arvore_geradora_minima(g); if(d != NULL) { escreve_grafo(stdout, d); destroi_grafo(d); } /* d = arborescencia_caminhos_minimos(g, v); if(d != NULL) { escreve_grafo(stdout, d); destroi_grafo(d); } */ d = distancias(g); if(d != NULL) { escreve_grafo(stdout, d); destroi_grafo(d); } fprintf(stdout, "Diametro = %ld\n", diametro(g)); if(conexo(g)) { fprintf(stdout, "Conexo!\n"); } else { fprintf(stdout, "Não é conexo!\n"); } if(fortemente_conexo(g)) { fprintf(stdout, "Fortemente conexo!\n"); } else { fprintf(stdout, "Não é fortemente conexo!\n"); } /*if((l_blocos = blocos(g)) != NULL) { fprintf(stderr, "\n--Blocos criados:\n" ); for(n = primeiro_no(l); n != NULL; n = proximo_no(n)) { c = (struct grafo *) conteudo(n); escreve_grafo(stdout, c); } destroi_lista(l_blocos, destroi_grafo); }*/ destroi_grafo(g); return 0; }