Example #1
0
void buscalargura(grafo *G, int s, int *d, int *pai){
	//branco=0 cinza=1 preto=2 e nulo=-1
	no *q;
	aresta *p;
	int cor[G->vertices], u, v;
	grafo L;
	q=G->inicio;
	while(q!=NULL){
		cor[q->vertice]=0;
		d[q->vertice]=-1;
		pai[q->vertice]=-1;
		q=q->prox;
	}
	cor[s]=1;
	d[s]=0;
	L.inicio=NULL;
	enfila(&L,s);
	while(L.inicio!=NULL){
		u=desenfila(&L);
		q=buscavertice(G,u);
		p=q->prox_aresta;
		while(p!=NULL){
			if(cor[p->arestas]==0){
				cor[p->arestas]=1;
				d[p->arestas]=d[u]+1;
				pai[p->arestas]=u;
				enfila(&L,p->arestas);
			}
			p=p->prox_aresta;
		}
		cor[u]=2;
	}
		//return d;
}
Example #2
0
/*Move a primeira posição da fila para a última, retornando o valor do elemento que andou*/
int anda_fila(Fila* noCabeca, Fila* fimFila) {
    int num;

    num = desenfila(noCabeca, fimFila);
    enfila(noCabeca, fimFila, num);

    return num;
}
Example #3
0
//avore geradora minima PRIM
void algoritimo_prim(grafo *G, int *d, int *pai, int *key){
	no *q;
	aresta *p;
	grafo Q;

	define(&Q);
	int maior, r;
	maior=buscamaior(G);
	int weight[maior][maior];
	//cria matriz de peso
	q=G->inicio;
	r=q->vertice;
	while(q!=NULL){
		if(q->prox_aresta!=NULL){
			p=q->prox_aresta;
			while(p!=NULL){
				weight[q->vertice][p->arestas]=p->custo;
				p=p->prox_aresta;
			}
		}
		q=q->prox;
	}
	// termina criar matriz

	q=G->inicio;
	while(q!=NULL){
		key[q->vertice]=9999;
		pai[q->vertice]=-1;
		enfila(&Q, q->vertice);
		q=q->prox;
	}
	key[r]=0;

	int u=buscaminimo(&Q, key);
	q=NULL;
	if(u!=-1){
		q=buscavertice(G,u);
	}

	while(q!=NULL){
		p=q->prox_aresta;
		while(p!=NULL){
			if(pertence(&Q,p->arestas)==1 && weight[q->vertice][p->arestas]<key[p->arestas]){
				pai[p->arestas]=q->vertice;
				key[p->arestas]=weight[q->vertice][p->arestas];
			}
			p=p->prox_aresta;
		}
		u=buscaminimo(&Q, key);
		q=NULL;
		if(u!=-1){
			q=buscavertice(G,u);
		}

	}

}
Example #4
0
void dijkstra(grafo *G, int s, int *distancia, int *pai){
	no *q;
	aresta *p;
	grafo Q;

	define(&Q);
	int maior, r;
	maior=buscamaior(G);
	int weight[maior][maior];
	//cria matriz de peso
	q=G->inicio;
	r=q->vertice;
	while(q!=NULL){
		if(q->prox_aresta!=NULL){
			p=q->prox_aresta;
			while(p!=NULL){
				weight[q->vertice][p->arestas]=p->custo;
				p=p->prox_aresta;
			}
		}
		q=q->prox;
	}
	// termina criar matriz
	q=G->inicio;
	while(q!=NULL){
		distancia[q->vertice]=9999;
		pai[q->vertice]=-1;
		enfila(&Q, q->vertice);
		q=q->prox;
	}
	distancia[s]=0;

	int u=buscaminimo(&Q, distancia);
	q=NULL;
	if(u!=-1){
		q=buscavertice(G,u);
	}
	while(q!=NULL){
		p=q->prox_aresta;
		while(p!=NULL){
			if(distancia[p->arestas] > weight[q->vertice][p->arestas]+distancia[q->vertice]){
				pai[p->arestas]=q->vertice;
				distancia[p->arestas]=weight[q->vertice][p->arestas]+distancia[q->vertice];
			}
			p=p->prox_aresta;
		}
		u=buscaminimo(&Q, distancia);
		q=NULL;
		if(u!=-1){
			q=buscavertice(G,u);
		}

	}

}
Example #5
0
/*Cria uma fila de tamanho n*/
void cria_fila(Fila* noCabeca, Fila* fimFila, int n) {
    int i = 1;

    inicializa_fila(noCabeca, fimFila);
    if(n == 0) {
        return;
    }
    while(i <= n) {
        enfila(noCabeca, fimFila, i);
        i++;
    }
}