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;
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);
}
Pergunta
brain_iac
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
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.