Ir ao conteúdo

Posts recomendados

Postado

Estou com um problema em um exercício de Grafos por matriz adjacência em que:

 

Minha busca em largura está retornando o ponteiro de pai e não o valor (não sou muito bom com ponteiros), como mostro abaixo:

 image.png.7d515b7176e057bd34053e2b8c73bddd.png

 

Nas duas buscas, a leitura do CSV está ocorrendo duas vezes, como no seguinte output: 

image.png.b36c5df41f6601402e1a25312aa2504d.png

 

Segue o código das funções que criei para resolver esse exercício:

struct vertices
{
    int id;         /*!< Identificação numérica do vértice  */
    //int p; // caso seja necessario adicionar o peso

    /*Dados do BFS*/
    int distancia;
    vertice_t *pai;

    /*Dados do BDP*/
    _Bool visitado;
    /* Mais informações, se necessário */
};

struct arestas
{
    int adj;        /*!< Valor booleando. Verdadeiro representa uma adjacência entre dois vértices  */

    /* Mais informações, se necessário */
};

struct grafos
{
    int n_vertices;         /*!< Número de vértices do grafo  */
    vertice_t *vertices;    /*!< Vetor de ponteiros: conjunto V */
    aresta_t **matriz_adj;  /* Matriz de adjacência: conjunto E */
};

void dfs(grafo_t *g, int fonte)
{
    int i;
    pilha_t *pilha = cria_pilha();

    for(i = 0; i < g->n_vertices; i++)
    {
        g->vertices[i].visitado = FALSE;
    }
    push(&g->vertices[fonte], pilha);

    while(!pilha_vazia(pilha))
    {
        vertice_t *u = pop(pilha);

        int v;
        int id_u = u->id;

        if(g->vertices[id_u].visitado == FALSE)
        {
            g->vertices[id_u].visitado = TRUE;

            for(v = 0; v < g->n_vertices; v++)
            {
                if(adjacente(g, id_u, v))
                {

                    if(g->vertices[v].visitado == FALSE)
                    {
                        push(&g->vertices[v], pilha);
                    }
                }
            }
        }
    }
    mostra_dfs(g);
}

void mostra_dfs(grafo_t *g)
{
    int i;

    for(i = 0; i < g->n_vertices; i++)
    {
        printf("Vertice %d ",i);
        if(g->vertices[i].visitado == FALSE)
        {
            printf("Não Visitado\n");
        }
        else
        {
            printf("Visitado\n");
        }
    }
}

grafo_t *ler_dados_csv(char *nome_do_arquivo)
{
    grafo_t *g;

    int n_vertices;    // numero de arestas
    int u,v;

    FILE *fp =fopen(nome_do_arquivo, "r");
    if (fp==NULL)
    {
        perror("Erro ao ler grafo");
        exit(EXIT_FAILURE);
    }

    fscanf(fp, "%d", &n_vertices);

    g = cria_grafo(n_vertices);   

    while (fscanf(fp, "%d,%d\n", &u, &v) == 2)
    {
        cria_adjacencia(g, u, v);
        cria_adjacencia(g, v, u);
    }

    fclose(fp);

    return g;
}

Além disso, meu arquivo CSV tem o seguinte formato: image.png.436a11aebc9d0369f5a3890d2ab3a9f4.png

Com o primeiro número sendo o total de arestas.

Alguma dica de onde posso corrigir?

  • Curtir 1
Postado

poste algo compilável, ajudando os outros a ajudarem você. Isso inclui o arquivo CSV. Não ajuda postar um link ou a imagem de uma planilha.

 

Compare:
 

6
.1
.2
.5
1.2
1.3
2.3
2.5
3.4
4.5

 

Isso se pode copiar direto para o editor e recriar o arquivo. E se tivesse o programa original com os #include e tudo uma pessoa poderia te ajudar com muito mais facilidade, copiando os dois e pronto.

 

Muitos podem querer ajudar mas não conseguir imaginar o erro só de ler as funções, e não tem tempo ou interesse em construir um programa de teste para os fragmentos que você postou

 

  • Curtir 1
Postado
22 horas atrás, arfneto disse:

poste algo compilável, ajudando os outros a ajudarem você. Isso inclui o arquivo CSV. Não ajuda postar um link ou a imagem de uma planilha.

 

Compare:
 

6
.1
.2
.5
1.2
1.3
2.3
2.5
3.4
4.5

 

Isso se pode copiar direto para o editor e recriar o arquivo. E se tivesse o programa original com os #include e tudo uma pessoa poderia te ajudar com muito mais facilidade, copiando os dois e pronto.

 

Muitos podem querer ajudar mas não conseguir imaginar o erro só de ler as funções, e não tem tempo ou interesse em construir um programa de teste para os fragmentos que você postou

 

E como eu faço isso? Só anexos os arquivos ou preciso incluir de uma forma específica?

Conforme recomendação do@arfneto, segue a pasta do projeto compactada:

Tarefa Grafos Matrix Adjacência.zip

  • Curtir 1
Postado
1 hora atrás, DaFranco disse:

E como eu faço isso? Só anexos os arquivos ou preciso incluir de uma forma específica?

Conforme recomendação do@arfneto, segue a pasta do projeto compactada:

 

A maioria dos problemas postados aqui se refere a um único arquivo de código e por isso se fala em inserir usando o botão code. como explicado no primeiro post do forum.

 

Para programas mais estruturados fica mesmo assim ainda difícil de usar e acho que o melhor seria, como todo mundo faz, usar o github, o maior repositório de código aberto que existe.

 

Porque? Simples: Todo IDE ou editor sério pode carregar um projeto direto do github. 1 click só. Ou se tem o programa git na sua máquina basta usar o comando git clone

 

 

  • Curtir 1
  • Obrigado 2
Postado

Claro que não falo em nome do forum ou do clube do hardware.

 

image.png.c9dfb9cec04cc8f16be5703799fbaf2d.png

 

 

exemplo do que estou falando aqui estão os mesmos arquivos: No github, que é da Microsoft.

 

Veja o botão para download como zip ou para abrir no IDE Visual Studio. Claro que há muitas outras opções compatíveis com git e github, como o VS Code ou o IntelliJ Idea da JetBrains

  • Obrigado 2

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

LANÇAMENTO!

eletronica2025-popup.jpg


CLIQUE AQUI E BAIXE AGORA MESMO!