Tenho a seguinte entrada:
5 4
2 3
5
1
O primeiro nº, no caso 5, é o nº de vértices do grafo; o 2º, no caso 4, é o nº de arestas.
Em cada linha representa um vértice, e os números em cada linha representam as adjacências que aquele vértice tem. Na 1ª linha, que representa o vértice 1, está informado que o vértice 1 é adjacente ao vértice 2 e que ele (o vértice 1) também é adjacente ao vértice 3.
As linhas 3 e 5 estão em branco para indicar que esses vértices não tem adjacência com ninguém.
Meu código até agora está assim:
typedef struct _NO { int chave; struct _NO* prox; } no; int TAM, aresta, vertice, key; no* vizinhosDeEntrada; no* vizinhosDeSaida; no* init(no* lista); void insere(no* lista, int vertice, int chave); void libera(no* lista); int main(void) { scanf("%d %d", &TAM, &aresta); int i;
// Inicializa as linhas de adjacências vizinhosDeEntrada = init(vizinhosDeEntrada); vizinhosDeSaida = init(vizinhosDeSaida); if (vizinhosDeEntrada == NULL) { printf("Erro na criacao da lista da entrada!!!\n"); exit(EXIT_FAILURE); } else if (vizinhosDeSaida == NULL) { printf("Erro na criacao da lista de saida!!!\n"); exit(EXIT_FAILURE); }
//Insere as adjacências. MEU PROBLEMA ESTÁ AQUI
for(i = 1; i < aresta + 1; i ++) { scanf("%d ", &key); insere(vizinhosDeEntrada,i,key); insere(vizinhosDeSaida,key,i); }
return 0;
}
no* init(no* lista) { int i; lista = (no*) malloc(sizeof(no)*(TAM+1)); for (i = 1; i < TAM + 1; i ++){ lista.chave = 0; lista.prox = NULL; } return lista; } void insere(no* lista,int vertice, int chave) { no* aux; aux = (no*) malloc(sizeof(no)); aux->prox= NULL; aux->chave = chave; no* fim; if(lista[vertice].prox == NULL) { lista[vertice].prox = aux; fim->prox = aux; } else { no* temp; temp = lista[vertice].prox; while(temp->prox != NULL) { temp = temp->prox; } temp->prox = aux; } lista[vertice].chave++; } void libera(no* lista) { int i; for(i = 0; i <= TAM; i ++) { no* atual = lista.prox; while(atual != NULL) { no* prox = atual->prox; free(atual); atual = prox; } } free(lista); }
Alguém pode me ajudar a preencher essa lista de adjacências de maneira correta?
Obrigado, espero que a dúvida tenha ficado clara