Ejemplo n.º 1
0
//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;
  }
}
Ejemplo n.º 2
0
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;
}
Ejemplo n.º 3
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);
}