Exemple #1
0
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);
}
Exemple #2
0
static void cria_vizinhanca(grafo g, vertice origem, vertice destino, long int peso){
    adjacencia viz_1 = malloc(sizeof(struct adjacencia));
    
    if(viz_1 == NULL)
	printf("Sem memoria");
    else{
    	viz_1->peso = peso;
    	viz_1->v_origem = origem;
    	viz_1->v_destino = destino;
   	insere_lista(viz_1, origem->adjacencias_saida);
    	origem->grau_saida++;
    	destino->grau_entrada++;

    	if (!direcionado(g)) {
        	// se o grafo não for direcionado, a aresta deve aparecer também na
        	// lista de adjacencia do vertice dest

        	adjacencia viz_2 = malloc(sizeof(struct adjacencia));
    		if(viz_2 == NULL)
			printf("Sem memoria");
    		else{
        		viz_2->peso = peso;
        		viz_2->v_origem = destino;
        		viz_2->v_destino = origem;
        		insere_lista(viz_2, destino->adjacencias_saida);
        		destino->grau_saida++;
        		origem->grau_entrada++;
            	}
        }
	else{
		adjacencia viz_3 = malloc(sizeof(struct adjacencia));
    		if(viz_3 == NULL)
			printf("Sem memoria");
    		else{
        		viz_3->peso = peso;
        		viz_3->v_origem = origem;
        		viz_3->v_destino = destino;
        		insere_lista(viz_3, destino->adjacencias_entrada);
            	}
        }
    }
    g->n_arestas++;
}
Exemple #3
0
// O(n)
int grau_vertice(int v1, Grafo *grafo) {
   if(v1 <= 0 || v1 > VERTICES)
      return -1; // Erro: Vértice está fora dos limites
   if(grafo == NULL)
      return -1; // Erro: Grafo é null

	int direc = direcionado(grafo);

   int i, grau = 0;
   
	if(direc)
		grau = grau_positivo(v1, grafo) + grau_negativo(v1, grafo);
	else {
		v1--;
		for(i = 0; i < VERTICES; i++)
			if(grafo->matriz_adjacencia[v1][i] != 0)
				grau++;
	}
         
   return grau;
}