void dijkstra(struct Matrix_Graph *mat_graph, struct Point_Graph *poi_graph, \ int source) { struct HeapNode *minNode; struct Heap heap; struct Edge *edge; initHeap(&heap, poi_graph, source); heapSort(heap.heapNode, heap.heap_size, \ sizeof(struct HeapNode), compare); while (heap.heap_size != 0) { minNode = (struct HeapNode *)extractTop(heap.heapNode, \ &(heap.heap_size), sizeof(struct HeapNode), compare); edge = poi_graph->node[minNode->to].start; while (edge) { decrease_key(mat_graph, &heap, source, minNode->to, edge); edge = edge->next; } } }
void threadProc() { _TaskType task; while (extractTop(task)) { task(); } }