Ir para conteúdo
Fórum Script Brasil
  • 0

Lista adjacencia


brain_iac

Pergunta

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);
}
 

Link para o comentário
Compartilhar em outros sites

0 respostass a esta questão

Posts Recomendados

Até agora não há respostas para essa pergunta

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,1k
    • Posts
      651,9k
×
×
  • Criar Novo...