//Função que irá Visitar os vizinhos, enfileirar, desenfileirar de acordo com a cor de cada vértice void VisitaBfs(TipoVertice u, TipoGrafo *Grafo, int **Dist, TipoCor *Cor, int *Antecessor){ TipoVertice v; TipoApontador Aux; short FimListaAdj; TipoPeso Peso; TipoItem Item; TipoFila Fila; Cor[u] = cinza; Dist[u][0] = 0; FFVazia(&Fila); Item.Vertice = u; Item.Peso = 0; Enfileira(Item, &Fila); while (!FilaVazia(Fila)){ Desenfileira(&Fila, &Item); u = Item.Vertice; if (!ListaAdjVazia(&u, Grafo)){ Aux = PrimeiroListaAdj(&u, Grafo); FimListaAdj = FALSE; while (FimListaAdj == FALSE){ ProxAdj(&u, Grafo, &v, &Peso, &Aux, &FimListaAdj); if (Cor[v] == branco){ Cor[v] = cinza; Dist[v][0] = Dist[u][0] + 1; Antecessor[v] = u; Item.Vertice = v; Item.Peso = Peso; Enfileira(Item, &Fila);} } } Cor[u] = preto; } }
int main(){ TDelimitador *fila=NULL; TElem *elem; int op; do{ menu(); scanf("%d",&op); switch(op){ case 1: int num; puts("Digite um identificador para enfileirar: "); scanf("%d",&num); Enfileira(fila,num); break; case 2: elem=Desenfileira(fila); printf("\nElemento Desinfileirado: %d",elem->Id); break; case 3: Esvazia(fila); Vazia(fila); break; default:op=0; break; } }while(op!=0); return 0; }
void VisitaBfs(TipoValorVertice u, TipoGrafo *Grafo, int *Dist, TipoCor *Cor, int *Antecessor) { TipoValorVertice v; Apontador Aux; short FimListaAdj; TipoPeso Peso; TipoItem Item; TipoFila Fila; Cor[u] = cinza; Dist[u] = 0; FFVazia(&Fila); Item.Vertice = u; Item.Peso = 0; Enfileira(Item, &Fila); printf("Visita origem%2d cor: cinza F:", u); ImprimeFila(Fila); getchar(); while (!FilaVazia(Fila)) { Desenfileira(&Fila, &Item); u = Item.Vertice; if (!ListaAdjVazia(&u, Grafo)) { Aux = PrimeiroListaAdj(&u, Grafo); FimListaAdj = FALSE; while (FimListaAdj == FALSE) { ProxAdj(&u, &v, &Peso, &Aux, &FimListaAdj); if (Cor[v] != branco) continue; Cor[v] = cinza; Dist[v] = Dist[u] + 1; Antecessor[v] = u; Item.Vertice = v; Item.Peso = Peso; Enfileira(Item, &Fila); } } Cor[u] = preto; printf("Visita%2d Dist%2d cor: preto F:", u, Dist[u]); ImprimeFila(Fila); getchar(); } } /* VisitaBfs */
int fila_de_espera(TipoFila *Fila, TipoItem *carro, int op) { switch (op) { case CHEGADA: Enfileira(*carro, Fila); return 1; case SAIDA: if (Vazia(Fila)) return 0; Desenfileira(Fila,carro); return 1; default: return 0; } return 0; }
void retirar_carro(ESTAC *estac, char *placa) { TipoItem carro; if (!strcmp(estac->carros[estac->norte - 1].placa, placa)) { Desenfileira_ESTAC(estac, &carro); carro.manobras++; mensagem(carro, SAIDA); deslocar(estac, SAIDA); return; } else if (pesquisa(estac, placa)) { TipoFila temp; Inicia(&temp); int aux = estac->norte - 1; while (strcmp(estac->carros[aux].placa, placa)) { Desenfileira_ESTAC(estac, &carro); carro.manobras++; Enfileira(carro, &temp); aux++; } Desenfileira_ESTAC(estac, &carro); carro.manobras++; mensagem(carro, SAIDA); deslocar(estac, aux); aux--; Apontador paux = temp.tras; while (aux >= 0) { estac->carros[aux] = paux->carro; estac->carros_count++; paux = paux->Ant; aux--; } } else printf("\nPlaca %s nao encontrada\n", placa); }