grafos
} Grafo;
/* Definicao do tipo para celula/no/nodo/elemento da fila */ typedef struct cel { int conteudo; struct cel *prox;
} Celula;
/* Definicao do tipo para fila com dois ponteiros (inicio e fim) */ typedef struct estruturaFila { Celula *inicio; Celula *fim;
} Fila;
/*procedimento que recebe o endereco de uma fila e inicializa inicio (cabeca) e fim (cauda)*/ void inicializarFila(Fila *fila) { fila->inicio = NULL; fila->fim = NULL;
}
/* procedimento que recebe o endereco de uma fila e um nome insere o nome na referencia da fila passada como parametro */ void incluirFila(int no, Fila *fila) { Celula *nova; nova = (Celula *) malloc (sizeof (Celula)); //aloca dinamicamente nova->conteudo = no; nova->prox = NULL;
//verifica se fila vazia if (fila->inicio == NULL) { //ou if (!fila->inicio) {} //tanto inicio (cabeca) e fim (cauda) da fila apontam para a nova celula fila->inicio = nova; fila->fim = nova; } else { //fila nao vazia fila->fim->prox = nova; fila->fim = nova; }
}
/*funcao que recebe o endereco de uma fila e remove o elemento mais antigo, ou seja no inicio, retornando o elemento do inicio */ int excluirFila(Fila *fila) { Celula *lixo; int no;
if (fila->inicio) { no = fila->inicio->conteudo; //verifica se hah mais de um elemento na fila if (fila->inicio->prox != NULL) { //ou if (fila->inicio->prox) {} lixo = fila->inicio; fila->inicio = fila->inicio->prox; free(lixo); } else { //somente um elemento fila->inicio = NULL; fila->fim = NULL; } return no; } else return -1;
}
void percursoAmplitude(Grafo *g, int nodoOrigem) { int no, i; Fila f; int visitados[g->qtdVertices];
if (nodoOrigem < 0 || nodoOrigem >= g->qtdVertices) { printf("\nNodo de partida invalido!!\n"); return; } inicializarFila(&f); for (no