what is getPaths returning here
Edge *getShortestPaths(Graph *graph, int startVertex) {
    Records *records = initRecords(graph, startVertex);
    while (!isEmpty(records->heap)) {
        Edge *min = extractMin(records->heap);
        records->finished[min->toVertex] = true;
        if (min->fromVertex != min->toVertex) {
            addTreeEdge(records, records->numTreeEdges, min->fromVertex, min->toVertex, min->weight);
        }
        AdjList *adj = graph->adjLists[min->toVertex];
        for (int i = 0; i < adj->numNeighbors; i++) {
            if (!records->finished[adj->neighbors[i].vertex]) {
                int weight = adj->neighbors[i].weight + min->weight;
                if (weight < records->heap->array[adj->neighbors[i].vertex]->weight) {
                    decreasePriority(records->heap, adj->neighbors[i].vertex, weight);
                    records->heap->array[adj->neighbors[i].vertex]->weight = weight;
                    records->predecessors[adj->neighbors[i].vertex] = min->toVertex;
                }
            }
        }
    }
}

AdjList *getPaths(Edge *distTree, int startVertex, int endVertex) {
    Edge *path = getShortestPaths(distTree, startVertex);
    return makePath(path, endVertex, startVertex);
}