예제 #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;
  }
}
예제 #2
0
//Função que caso a a fila não esteja vazia, atribui o valor a *Item e libera a memoria alocada para aquele espaço
void Desenfileira(TipoFila *Fila, TipoItem *Item){
  TipoApontador q;
  if (FilaVazia(*Fila)){
    printf("FILA VAZIA");
    return;
  }
  q = Fila->Frente;
  Fila->Frente = Fila->Frente->Prox;
  *Item = Fila->Frente->Item;
  free(q);
}
예제 #3
0
void Desenfileira(TipoFila *Fila, TipoItem *Item)
{ Celula *q;
  if (FilaVazia(*Fila)) 
  { printf(" Erro   fila est  a  vazia\n");
    return;
  }
  q = Fila->Frente;
  Fila->Frente = Fila->Frente->Prox;
  *Item = Fila->Frente->Item;
  free(q);
} 
예제 #4
0
파일: main.c 프로젝트: savioneves1/final
int main(){

    FILE *arq, *arqT, *arqC;
    char c;
    struct tipofila *finicio;
    int count=0;

    int count1=42;

    InicializaFila(&finicio);

    arq = fopen ("dadosdctphoto.txt", "r");
    arqT = fopen ("dadosdctphoto_temp.txt", "w");
    arqC = fopen ("dadosdctphoto_coef.txt", "w");

    while ((c = getc (arq)) != EOF) {
        if (c!='\n'){
            count=count+1;
            InsereFila(&finicio,c);
        }
        if(c=='\n'){
            InsereFila(&finicio,c);
            if(count==count1){
                while(!FilaVazia(finicio)){
                    fputc(RetiraFila(&finicio),arqC);
                }
            }
            else{
                while(!FilaVazia(finicio)){
                    fputc(RetiraFila(&finicio),arqT);
                }
            }
            count=0;
        }
    }
    fclose (arq);
    fclose (arqT);
    fclose(arqC);
    return 0;
}
예제 #5
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 */