Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- @Override
- public void runDijkstra(int src, int[] distances) {
- dijkstraPreprocessedOrder.clear();
- distances[0] = 0;
- for (int i = 1 ; i < adjList.size() ; i++) {
- distances[i] = INF;
- }
- PriorityQueue<Pair<Integer, Integer>> processingQueue = new PriorityQueue<>();
- for (int i = 0 ; i < adjList.size() ; i++) {
- processingQueue.add(new Pair<>(distances[i], i));
- }
- while (!processingQueue.isEmpty()) {
- Pair<Integer, Integer> curPair = processingQueue.poll();
- int curNode = curPair.getSecond();
- dijkstraPreprocessedOrder.add(curNode);
- for (Neighbor neighbor : adjList.get(curNode)) {
- int curNeigbor = neighbor.getDest();
- if (distances[curNode] + neighbor.getCost() < distances[curNeigbor]) {
- processingQueue.remove(new Pair<>(distances[curNeigbor], curNeigbor));
- distances[curNeigbor] = distances[curNode] + neighbor.getCost();
- processingQueue.add(new Pair<>(distances[curNeigbor], curNeigbor));
- }
- }
- }
- replaceInfinity(distances);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement