Bird
Raised Fist0
DSA Javaprogramming~5 mins

Bellman Ford Algorithm Negative Weights in DSA Java - Cheat Sheet & Quick Revision

Choose your learning style10 modes available
Recall & Review
beginner
What is the main purpose of the Bellman Ford algorithm?
The Bellman Ford algorithm finds the shortest path from a single source node to all other nodes in a graph, even if the graph has edges with negative weights.
Click to reveal answer
intermediate
How does Bellman Ford handle negative weight edges differently from Dijkstra's algorithm?
Bellman Ford can handle negative weight edges by relaxing all edges multiple times, while Dijkstra's algorithm assumes all edge weights are non-negative and may fail with negative weights.
Click to reveal answer
intermediate
What does it mean if Bellman Ford detects a negative weight cycle?
It means there is a cycle in the graph where the total sum of edge weights is negative, causing the shortest path to be undefined because you can keep going around the cycle to reduce the path cost infinitely.
Click to reveal answer
beginner
In Bellman Ford, how many times do we relax all edges in the graph?
We relax all edges exactly (V - 1) times, where V is the number of vertices in the graph.
Click to reveal answer
beginner
What is the time complexity of the Bellman Ford algorithm?
The time complexity is O(V * E), where V is the number of vertices and E is the number of edges in the graph.
Click to reveal answer
What does the Bellman Ford algorithm detect besides shortest paths?
ANegative weight cycles
BMaximum flow
CMinimum spanning tree
DStrongly connected components
How many times are edges relaxed in Bellman Ford for a graph with V vertices?
AV - 1 times
BE times
CV times
DE - 1 times
Which type of graph edge weights can Bellman Ford handle that Dijkstra cannot?
APositive weights only
BZero weights only
CNegative weights
DNon-integer weights
What happens if a negative weight cycle exists in the graph?
ABellman Ford runs faster
BBellman Ford finds shortest paths normally
CBellman Ford ignores the cycle
DBellman Ford detects it and reports no solution
What is the worst-case time complexity of Bellman Ford?
AO(V + E)
BO(V * E)
CO(V^2)
DO(E^2)
Explain how the Bellman Ford algorithm finds shortest paths in graphs with negative weights.
Think about how edges are relaxed repeatedly and how cycles affect the result.
You got /4 concepts.
    Describe the process Bellman Ford uses to detect negative weight cycles.
    Focus on what happens after the main relaxation steps.
    You got /4 concepts.

      Practice

      (1/5)
      1. What is the main advantage of the Bellman-Ford algorithm compared to Dijkstra's algorithm?
      easy
      A. It can handle graphs with negative weight edges.
      B. It runs faster on all graphs.
      C. It uses less memory.
      D. It only works on directed acyclic graphs.

      Solution

      1. Step 1: Understand Dijkstra's limitation

        Dijkstra's algorithm cannot handle negative weight edges correctly because it assumes once a node is visited, its shortest path is finalized.
      2. Step 2: Bellman-Ford's capability

        Bellman-Ford algorithm relaxes edges multiple times and can detect negative weight edges, allowing it to work correctly even with negative weights.
      3. Final Answer:

        It can handle graphs with negative weight edges. -> Option A
      4. Quick Check:

        Negative weights handled = A [OK]
      Hint: Bellman-Ford works with negative edges, Dijkstra doesn't [OK]
      Common Mistakes:
      • Thinking Bellman-Ford is always faster
      • Believing it only works on acyclic graphs
      • Confusing memory usage advantages
      2. Which of the following is the correct way to initialize the distance array in Bellman-Ford algorithm in Java?
      easy
      A. int[] dist = new int[V]; Arrays.fill(dist, -1); dist[src] = 0;
      B. int[] dist = new int[V]; dist[src] = Integer.MAX_VALUE;
      C. int[] dist = new int[V]; Arrays.fill(dist, Integer.MAX_VALUE); dist[src] = 0;
      D. int[] dist = new int[V]; Arrays.fill(dist, 0);

      Solution

      1. Step 1: Initialize distances to max value

        We set all distances to Integer.MAX_VALUE to represent infinity initially.
      2. Step 2: Set source distance to zero

        The source vertex distance is set to 0 because distance from source to itself is zero.
      3. Final Answer:

        int[] dist = new int[V]; Arrays.fill(dist, Integer.MAX_VALUE); dist[src] = 0; -> Option C
      4. Quick Check:

        Distance init with max + source zero = D [OK]
      Hint: Initialize all distances to max, source to zero [OK]
      Common Mistakes:
      • Setting source distance to max instead of zero
      • Filling distances with zero instead of max
      • Using -1 which is invalid for distances
      3. Consider the following graph edges and weights:
      int[][] edges = {
        {0, 1, 4},
        {0, 2, 5},
        {1, 2, -3},
        {2, 3, 4}
      };
      int V = 4; int src = 0;
      
      What is the shortest distance array after running Bellman-Ford from source 0?
      medium
      A. [0, 4, 5, 9]
      B. [0, 4, 1, 5]
      C. [0, 4, 1, 9]
      D. [0, 0, -3, 1]

      Solution

      1. Step 1: Initialize distances

        dist = [0, INF, INF, INF]
      2. Step 2: Relax edges V-1 times

        Iteration 1: - Edge 0->1: dist[1] = min(INF, 0+4) = 4 - Edge 0->2: dist[2] = min(INF, 0+5) = 5 - Edge 1->2: dist[2] = min(5, 4-3) = 1 - Edge 2->3: dist[3] = min(INF, 1+4) = 5 Iteration 2 and 3 do not improve distances further.
      3. Final Answer:

        [0, 4, 1, 5] -> Option B
      4. Quick Check:

        Relax edges 3 times, final dist = [0,4,1,5] [OK]
      Hint: Relax edges V-1 times, update distances each time [OK]
      Common Mistakes:
      • Not updating dist[2] after edge 1->2 relaxation
      • Ignoring negative edge effect
      • Stopping after first iteration
      4. Given this snippet of Bellman-Ford code, what is the error?
      for (int i = 0; i < V; i++) {
        for (int[] edge : edges) {
          int u = edge[0], v = edge[1], w = edge[2];
          if (dist[u] != Integer.MAX_VALUE && dist[u] + w < dist[v]) {
            dist[v] = dist[u] + w;
          }
        }
      }
      medium
      A. The outer loop should run V-1 times, not V times.
      B. The condition dist[u] != Integer.MAX_VALUE is incorrect.
      C. The edge array indexing is wrong.
      D. The distance update should be dist[u] - w instead of dist[u] + w.

      Solution

      1. Step 1: Check loop iteration count

        Bellman-Ford requires relaxing edges exactly V-1 times to find shortest paths.
      2. Step 2: Identify loop error

        The code runs the outer loop V times, which is one extra iteration and can cause incorrect behavior or unnecessary work.
      3. Final Answer:

        The outer loop should run V-1 times, not V times. -> Option A
      4. Quick Check:

        Outer loop count = V-1 [OK]
      Hint: Run outer loop V-1 times for correct relaxation [OK]
      Common Mistakes:
      • Running loop V times instead of V-1
      • Misunderstanding distance initialization condition
      • Incorrect edge array indexing
      5. You run Bellman-Ford on a graph with edges:
      int[][] edges = {
        {0, 1, 1},
        {1, 2, -1},
        {2, 3, -1},
        {3, 1, -1}
      };
      int V = 4; int src = 0;
      What will the algorithm detect after V-1 iterations?
      hard
      A. Algorithm will throw an exception due to negative weights.
      B. No negative weight cycle; shortest paths found.
      C. Distances will all be zero.
      D. A negative weight cycle exists reachable from the source.

      Solution

      1. Step 1: Identify cycle in graph

        Edges 1->2, 2->3, 3->1 form a cycle with total weight -3 (negative).
      2. Step 2: Bellman-Ford detects negative cycles

        After V-1 iterations, the algorithm checks for further relaxation. If possible, it means a negative weight cycle exists reachable from source.
      3. Final Answer:

        A negative weight cycle exists reachable from the source. -> Option D
      4. Quick Check:

        Negative cycle detected = C [OK]
      Hint: Check for extra relaxation after V-1 iterations to find negative cycles [OK]
      Common Mistakes:
      • Assuming no negative cycle despite cycle with negative sum
      • Expecting exception on negative weights
      • Thinking distances become zero automatically
      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