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:
Nas duas buscas, a leitura do CSV está ocorrendo duas vezes, como no seguinte output:
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:
Com o primeiro número sendo o total de arestas.
Alguma dica de onde posso corrigir?