Bird
Raised Fist0
DSA C++programming~5 mins

Dijkstra's Algorithm Single Source Shortest Path in DSA C++ - Cheat Sheet & Quick Revision

Choose your learning style10 modes available
Recall & Review
beginner
What is the main goal of Dijkstra's Algorithm?
To find the shortest path from a single starting point (source) to all other points (nodes) in a graph with non-negative edge weights.
Click to reveal answer
intermediate
In Dijkstra's Algorithm, what data structure is commonly used to efficiently select the next node with the smallest tentative distance?
A priority queue (often implemented as a min-heap) is used to quickly pick the node with the smallest current distance estimate.
Click to reveal answer
intermediate
Why can't Dijkstra's Algorithm handle graphs with negative edge weights?
Because it assumes that once a node's shortest distance is found, it won't get shorter. Negative edges can create shorter paths after visiting nodes, breaking this assumption.
Click to reveal answer
advanced
What is the time complexity of Dijkstra's Algorithm using a priority queue and adjacency list?
O((V + E) log V), where V is the number of vertices and E is the number of edges.
Click to reveal answer
beginner
Explain the relaxation step in Dijkstra's Algorithm.
Relaxation means checking if the current known distance to a neighbor can be improved by going through the current node. If yes, update the neighbor's distance and priority queue.
Click to reveal answer
What type of graph edge weights can Dijkstra's Algorithm handle?
ABoth negative and positive weights
BOnly negative weights
COnly non-negative weights
DNo weights (unweighted graphs only)
Which data structure helps Dijkstra's Algorithm efficiently pick the next node to process?
AQueue
BPriority Queue
CStack
DLinked List
What happens during the relaxation step in Dijkstra's Algorithm?
AWe update the shortest distance to a neighbor if a shorter path is found
BWe remove the node from the graph
CWe add new nodes to the graph
DWe reset all distances to infinity
What is the initial distance to the source node in Dijkstra's Algorithm?
AZero
BInfinity
COne
DNegative one
Which of these is NOT a step in Dijkstra's Algorithm?
AInitialize all distances to infinity except source
BUse a priority queue to select the next node
CRelax edges to update distances
DUse depth-first search to explore nodes
Describe how Dijkstra's Algorithm finds the shortest path from a source node to all other nodes in a graph.
Think about starting with the source and gradually improving distance estimates.
You got /5 concepts.
    Explain why Dijkstra's Algorithm cannot be used with graphs that have negative edge weights.
    Consider what happens if a path gets shorter after visiting nodes.
    You got /4 concepts.

      Practice

      (1/5)
      1. What is the main purpose of Dijkstra's Algorithm in graph theory?
      easy
      A. To sort vertices in topological order
      B. To find the maximum flow in a network
      C. To detect cycles in a graph
      D. To find the shortest path from a single source to all other vertices

      Solution

      1. Step 1: Understand the algorithm's goal

        Dijkstra's Algorithm is designed to find the shortest distances from one starting point (source) to every other point in a graph with non-negative edge weights.
      2. Step 2: Compare with other graph algorithms

        Other algorithms like max flow or cycle detection serve different purposes, so they do not match Dijkstra's goal.
      3. Final Answer:

        To find the shortest path from a single source to all other vertices -> Option D
      4. Quick Check:

        Dijkstra's Algorithm = shortest paths from source [OK]
      Hint: Remember: Dijkstra finds shortest paths from one source [OK]
      Common Mistakes:
      • Confusing Dijkstra with algorithms for max flow
      • Thinking it detects cycles
      • Assuming it sorts vertices
      2. Which of the following is the correct way to initialize the distance array in Dijkstra's Algorithm in C++?
      easy
      A. vector<int> dist(n, -1); dist[source] = 0;
      B. vector<int> dist(n, INT_MAX); dist[source] = 0;
      C. vector<int> dist(n, 0); dist[source] = INT_MAX;
      D. vector<int> dist(n); dist[source] = 0;

      Solution

      1. Step 1: Understand distance initialization

        Distances to all nodes except the source should start as infinity (or a very large number) to represent unknown distance.
      2. Step 2: Check each option

        vector<int> dist(n, INT_MAX); dist[source] = 0; correctly sets all distances to INT_MAX and source distance to 0. Others either set wrong initial values or leave uninitialized.
      3. Final Answer:

        vector<int> dist(n, INT_MAX); dist[source] = 0; -> Option B
      4. Quick Check:

        Distance array initialized with INT_MAX except source = 0 [OK]
      Hint: Initialize all distances to max except source zero [OK]
      Common Mistakes:
      • Setting all distances to zero initially
      • Not setting source distance to zero
      • Leaving distance array uninitialized
      3. Consider the following graph edges and weights:
      
      0 -> 1 (4), 0 -> 2 (1), 2 -> 1 (2), 1 -> 3 (1), 2 -> 3 (5)
      
      If we run Dijkstra's Algorithm from source vertex 0, what is the shortest distance array after completion?
      medium
      A. [0, 3, 1, 4]
      B. [0, 4, 1, 6]
      C. [0, 2, 1, 3]
      D. [0, 5, 1, 7]

      Solution

      1. Step 1: Initialize distances

        Start with dist = [0, INF, INF, INF]. Source 0 distance is 0.
      2. Step 2: Relax edges step-by-step

        From 0: dist[1] = 4, dist[2] = 1. From 2: dist[1] = min(4, 1+2=3) = 3, dist[3] = 1+5=6. From 1: dist[3] = min(6, 3+1=4) = 4.
      3. Final Answer:

        [0, 3, 1, 4] -> Option A
      4. Quick Check:

        Shortest distances from 0 = [0,3,1,4] [OK]
      Hint: Update distances by relaxing edges with minimum sums [OK]
      Common Mistakes:
      • Not updating distance to vertex 1 via vertex 2
      • Incorrectly summing edge weights
      • Ignoring better paths found later
      4. The following C++ code snippet for Dijkstra's Algorithm has a bug. What is the error?
      
      vector<int> dist(n, INT_MAX);
      dist[source] = 0;
      priority_queue> pq;
      pq.push({0, source});
      while(!pq.empty()) {
        int u = pq.top().second;
        int d = pq.top().first;
        pq.pop();
        if(d > dist[u]) continue;
        for(auto &edge : graph[u]) {
          int v = edge.first;
          int w = edge.second;
          if(dist[u] + w < dist[v]) {
            dist[v] = dist[u] + w;
            pq.push({dist[v], v});
          }
        }
      }
      
      medium
      A. priority_queue is max-heap by default (needs negative distances or greater comparator)
      B. Distance array is not initialized correctly
      C. The graph adjacency list is not iterated properly
      D. The source distance is not set to zero

      Solution

      1. Step 1: Check priority queue usage

        In C++, priority_queue by default is max-heap. To get min-heap behavior for distances, distances should be pushed as negative or use greater comparator.
      2. Step 2: Identify the bug

        The code pushes distances as positive values, so the smallest distance won't be on top, causing incorrect behavior.
      3. Final Answer:

        priority_queue is max-heap by default (needs negative distances or greater comparator) -> Option A
      4. Quick Check:

        Use negative distances or min-heap for correct priority queue [OK]
      Hint: Use negative distances or min-heap to get smallest distance first [OK]
      Common Mistakes:
      • Ignoring priority queue ordering behavior
      • Not setting source distance to zero
      • Incorrect graph iteration
      5. You have a weighted graph with 5 vertices and edges:
      
      0->1(10), 0->4(5), 1->2(1), 2->3(4), 4->1(3), 4->2(9), 4->3(2), 3->0(7)
      
      Using Dijkstra's Algorithm from source 0, what is the shortest distance to vertex 3?
      hard
      A. 13
      B. 15
      C. 7
      D. 18

      Solution

      1. Step 1: Initialize distances

        dist = [0, INF, INF, INF, INF]. Source 0 distance is 0.
      2. Step 2: Relax edges step-by-step

        From 0: dist[1]=10, dist[4]=5. From 4: dist[1]=min(10,5+3=8)=8, dist[2]=min(INF,5+9=14)=14, dist[3]=min(INF,5+2=7)=7. From 1: dist[2]=min(14,8+1=9)=9. From 2: dist[3]=min(7,9+4=13)=7.
      3. Step 3: Final shortest distance to vertex 3

        The shortest distance to vertex 3 is 7.
      4. Final Answer:

        7 -> Option C
      5. Quick Check:

        Shortest distance to vertex 3 = 7 [OK]
      Hint: Relax edges in order, update distances with minimum sums [OK]
      Common Mistakes:
      • Not updating distances via vertex 4
      • Ignoring better paths through intermediate vertices
      • Confusing edge weights
      Recommended

      Ready to prove it?

      Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

      10 questions~5 mineasy hard