Ir para conteúdo
Fórum Script Brasil

brain_iac

Membros
  • Total de itens

    1
  • Registro em

  • Última visita

Sobre brain_iac

brain_iac's Achievements

0

Reputação

  1. brain_iac

    Lista adjacencia

    Eai pessoal, tudo bem? esse é meu primeiro post espero que esteja na área correta. Vamos ao problema estou estudando grafos e vi que existe duas maneiras principais de representar grafos em c, matriz e lista de adjacência, então decidi implementar uma lista de adjacência porem, não sei se esta correta.Gostaria que vocês verificassem se possível. #include <stdio.h> #include <stdlib.h> typedef struct vertice Vertice; struct vertice{ int valor; int nro_arestas; int visitado; Vertice *proximo; }; typedef struct grafo{ Vertice *inicio; int nro_vertices; int tamanho; }Grafo; int main(){ Grafo teste[5]; lista_incia(&teste); lista_insere(&teste[0]); lista_insere(&teste[0]); lista_insere(&teste[1]); lista_insere(&teste[1]); lista_insere(&teste[2]); lista_insere(&teste[2]); lista_insere(&teste[3]); lista_insere(&teste[3]); lista_insere(&teste[4]); //lista_insere(&teste[1]); //lista_insere(&teste[1]); //busca_em_profundidade_visita(&teste); lista_imprime(&teste[0]); lista_imprime(&teste[1]); lista_imprime(&teste[2]); lista_imprime(&teste[3]); lista_imprime(&teste[4]); int vis[5]; // buscaProfundidade_Grafo(teste, 0, vis); return 0; } void lista_incia(Grafo *li){ int i = 0; for(i = 0; i < 5; ++i){ li.inicio = NULL; li.nro_vertices = 5; li.tamanho = 0; } } void lista_insere(Grafo *li){ if(li == NULL){ return 0; }else{ Vertice *novo; novo = (Vertice*) malloc (sizeof(Vertice)); if(novo == NULL){ return 0; }else{ printf("Digite um numero:\n"); scanf("%d", &novo->valor); novo->proximo = li->inicio; li->inicio = novo; li->tamanho++; } } } void lista_imprime(Grafo *li){ Vertice* novo; novo = (Vertice*) malloc(sizeof(Vertice)); novo = li->inicio; int i = 0; //while(novo != NULL){ for(i = 0; i < li->tamanho; ++i){ printf("%d ->", novo->valor); novo = novo->proximo; } //} printf("\n"); } void buscaProfundidade(Grafo *li, int ini, int *visitado, int cont){ int i; visitado[ini] = cont; for(i=0; i<li->tamanho; i++){ if(!visitado[li->inicio->valor]){ li->inicio = li->inicio->proximo; buscaProfundidade(li,li->inicio,visitado,cont+1); } } } void buscaProfundidade_Grafo(Grafo *li, int ini, int *visitado){ int i, cont = 1; for(i=0; i < 5; i++) visitado = 0; //buscaProfundidade(li, ini, visitado, cont); for(i=0; i < 5; i++) printf("%d -> %d\n",i,visitado); }
×
×
  • Criar Novo...