Exemplo 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;
  }
}
Exemplo 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;
}
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;
}
Exemplo n.º 4
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 */