예제 #1
0
void dijkstra(Graph G, Vertex s, Vertex parnt[], double cst[]) {
	Vertex v, w; 
	link p;

    GRAPHmaxcst(G);

	for (v = 0; v < G->V; v++) {
		cst[v] = INFINITO;
		parnt[v] = -1;
	}
	
	PQinit(G->V);
	cst[s] = 1;
	parnt[s] = s;
	PQinsert(s);
	
	while (!PQempty()) {
		v = PQdelmax(cst);
		for(p=G->adj[v];p!=NULL;p=p->next) {
			if (cst[w=p->w]==INFINITO) {
				cst[w]=cst[v]*p->cst;
				parnt[w]=v;
				PQinsert(w);
			}
			else if(cst[w]<cst[v]*p->cst) {
				cst[w]=cst[v]*p->cst;
				parnt[w] = v;
			}
		}
	}
	PQfree();
}
void PQsort(Item a[], int l, int r)
{
  int k;

  PQinit(r-l);
  for (k = l; k <= r; k++)
    PQinsert(a[k]);
  for (k = r; k >=l; k--)
    a[k] = PQdelmax();
}