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(); }