예제 #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);
}
예제 #2
0
//------------------------------------------------------------------------------
int fortemente_conexo(grafo g) {
  /* O procedimento usado é o mesmo para verificar se um grafo não direcionado é conexo,
     a diferença é que a matriz é assimétrica pois cada arco é utilizado apenas em um sentido
     (e não nos dois como nas arestas), portanto, utilizando a função conexo é possível verificar
     se o grafo também é fortemente conexo */
  return conexo(g);
}
예제 #3
0
int main()
{
	int i, n, x, y, teste=1;
	while(scanf("%d", &n) && n)
	{
		memset(grau, 0, sizeof(grau));
		memset(adj, 0, sizeof(adj));
		for(i=0;i<n;i++)
		{
			scanf("%d%d", &x, &y);
			grau[x]++;
			grau[y]++;
			adj[x][y]=1;
			adj[y][x]=1;
		}
		printf("Teste %d\n", teste++);
		if(conexo())
		{
			if(euleriano())	printf("sim\n\n");
			else printf("nao\n\n");
		}
		else printf("nao\n\n");
	}
	return 0;
}
예제 #4
0
파일: main.cpp 프로젝트: elitonperin/words
int main(){

	int tam_entrada;
	char palavra[MAX];
	int quant_palavras;
	scanf("%d", &tam_entrada);

	if(tam_entrada > MAX_T)
		return 0;

	for (int i = 0; i < tam_entrada; i++){

		// Inicializacao, zerando tudo
		for (int l = 0; l < MAX_ALFA; l++){
			graus[l] = graus_vertice_origem[l] = graus_vertice_destino[l] = 0;
			visitados[l] = 0;
			for (int m = 0; m < MAX_ALFA; ++m){
				grafo[l][m] = 0;
			}
		}
		quant_vertices = 0;

		// Lendo 
		scanf("%d", &quant_palavras);
		if(quant_palavras > MAX_N || quant_palavras < 1)
			return 0;
		for (int j = 0; j < quant_palavras; j++){
			scanf("%s", &palavra[0]);
			int k;
			for (k = 0; palavra[k+1] != '\0'; k++);
			if(k == 0)
				return 0;

			int o = palavra[0]-'a';
			int d = palavra[k]-'a';
			graus_vertice_origem[o]++;
			graus_vertice_destino[d]++;
			grafo[o][d] = 1;
			graus[o]++;
			graus[d]++;
			
		}

		for (int j = 0; j < MAX_ALFA; j++)
		{
			if(graus[j] > 0)
				quant_vertices++;
		}

		/*
		if (1)
		{
			
			printf("\nQuantidade de vertices: %d\n", quant_vertices);
			for (int l = 0; l < MAX_ALFA; ++l){
				printf("%d ", graus_vertice_origem[l]);
			}
			printf("\n");
			for (int l = 0; l < MAX_ALFA; ++l){
				printf("%d ", graus_vertice_destino[l]);
			}
			printf("\n");
			for (int l = 0; l < MAX_ALFA; ++l){
				printf("%d ", visitados[l]);
			}
			printf("\n");	
			
		}
		if(v)
			printf("Sim pode ser euleriano\n");
		if(c)
			printf("Eh conexo\n");
		*/
		bool v = pode_ser_euleriano();

		bool c = conexo();

		if( v && c ){
			printf("Ordering is possible.\n");
		}else{
			printf("The door cannot be opened.\n");
		}
	}
	
	return 0;
}
예제 #5
0
//------------------------------------------------------------------------------
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;
}