/*function to update the dist, pred arrays, as well as ensure the priority queue is up to scratch */ void update(int v,int current,int pred[], int dist[], priority_queue *pq, int **costs) { /*update dist/pred arrays */ dist[v]=dist[current]+costs[current][v]; pred[v]=current; /*update the priority queue in the right position, using its built in hash table to ensure the correct index gets updated. This newly updated node is then bubbled up to ensure the heap property is maintained */ decrease_priority(pq,pq->hash[v],dist[v]); if (DEBUG) printf("The new distance to %d is: %d through %d \n", v,dist[v],pred[v]); }
int main() { record queue[10000]; long int ele, pr; char ch; scanf("%c",&ch); getchar(); do { switch(ch) { case 'a': scanf("%ld",&ele); scanf("%ld",&pr); getchar(); if(checkNumber(ele) && checkNumber(pr) && ele >= 0 && pr >=1) { insert(queue, ele, pr); size++; } else { printf("Enter elements in given range.\n"); } break; case 'e': extract_min(queue); break; case 'g': get_min(queue); break; case 'd': scanf("%ld",&ele); scanf("%ld",&pr); getchar(); if(checkNumber(ele) && checkNumber(pr) && ele >= 0 && pr >=1) { decrease_priority(queue, ele, pr); } else { printf("Enter elements in given range.\n"); } break; case 's': printf("\n"); break; default: printf("Enter correct choice.\n"); break; } scanf("%c",&ch); getchar(); } while(ch != 's'); return 0; }