void buscalargura(grafo *G, int s, int *d, int *pai){ //branco=0 cinza=1 preto=2 e nulo=-1 no *q; aresta *p; int cor[G->vertices], u, v; grafo L; q=G->inicio; while(q!=NULL){ cor[q->vertice]=0; d[q->vertice]=-1; pai[q->vertice]=-1; q=q->prox; } cor[s]=1; d[s]=0; L.inicio=NULL; enfila(&L,s); while(L.inicio!=NULL){ u=desenfila(&L); q=buscavertice(G,u); p=q->prox_aresta; while(p!=NULL){ if(cor[p->arestas]==0){ cor[p->arestas]=1; d[p->arestas]=d[u]+1; pai[p->arestas]=u; enfila(&L,p->arestas); } p=p->prox_aresta; } cor[u]=2; } //return d; }
/*Move a primeira posição da fila para a última, retornando o valor do elemento que andou*/ int anda_fila(Fila* noCabeca, Fila* fimFila) { int num; num = desenfila(noCabeca, fimFila); enfila(noCabeca, fimFila, num); return num; }
/*Desaloca a memória reservada para a fila*/ void libera_fila(Fila* noCabeca, Fila* fimFila) { int i = 1; while(i) { i = desenfila(noCabeca, fimFila); } free((*noCabeca)); }