void bl(grafo* g,vertice* s){

    vertice* v;
    fila* f = alocar_fila();

    for(v = g->vertices;v < g->vertices+g->n;v++)
        v->dist = -1;
    s->pred = NULL;
    s->dist = 0;

    inserir_fila(f,s);

    while(f->comeco != NULL){
        vertice* temp = remover_fila(f);
        //printf("%c : %d\n",temp->id,temp->dist);

        arco* a;
        for(a = temp->comeco;a != NULL;a=a->prox){
            if(a->w->dist == -1){
                a->w->dist = temp->dist+1;
                a->w->pred = temp;
                inserir_fila(f,a->w);
            }
        }
    }

    for(v=g->vertices;v<g->vertices+g->n;v++){
        printf("%c: %d\n",v->id,v->dist);
    }
}
Example #2
0
File: largura.c Project: privati/ED
void imprime_largura(Arv *raiz){
    Arv* aux;

    Fila fila;
    iniciar(&fila);
    if (raiz!=NULL){
        inserir_fila(&fila, raiz);
        while(fila_vazia(&fila)==0){
            aux = remover_fila(&fila);
            printf("%d.", aux->elem);
            if(aux->esq!=NULL)
                inserir_fila(&fila, aux->esq);
            if(aux->dir!=NULL)
                inserir_fila(&fila, aux->dir);
        }
    }    
    else
        printf("Arvore vazia!\n");
}