3108. Minimum Cost Walk in Weighted Graph - Detailed Explanation

Free Coding Questions Catalog
Boost your coding skills with our essential coding questions catalog. Take a step towards a better tech career now!

Problem Statement

In this problem, you are given a weighted graph with a set of nodes and directed edges, where each edge has an associated cost. The task is to determine the minimum cost walk from a specified source node to a target node. A walk in this context can visit nodes multiple times (i.e., cycles are allowed) as long as it minimizes the total cost. It is assumed that all edge costs are non-negative (if negative edges were allowed, a different approach such as Bellman-Ford would be necessary). If the target is unreachable from the source, you should indicate that (for example, by returning -1).

Example

Suppose we have a graph with 5 nodes (indexed from 0 to 4) and the following directed edges (each represented as [u, v, cost]):

  • [0, 1, 10]
  • [0, 2, 3]
  • [1, 2, 1]
  • [2, 1, 4]
  • [2, 3, 2]
  • [1, 3, 2]
  • [3, 4, 7]

If the source is node 0 and the target is node 4, one optimal walk is:

  • 0 → 2 (cost 3)
  • 2 → 3 (cost 2)
  • 3 → 4 (cost 7)

The total minimum cost is 3 + 2 + 7 = 12.

Hints

  1. Shortest Path Algorithms:
    When edge weights are non-negative, Dijkstra’s algorithm is efficient for finding the shortest (minimum cost) walk. It uses a priority queue to always extend the current least-cost path.

  2. Graph Representation:
    Represent the graph using an adjacency list. For each node, maintain a list of pairs (neighbor, cost) that represent outgoing edges.

  3. Relaxation Technique:
    Keep an array (or map) to store the minimum cost to reach each node from the source. As you process each node, update (relax) the cost for each neighboring node if a cheaper cost is found.

Approaches

Dijkstra's Algorithm

  • Idea:
    Start from the source node and use a priority queue to repeatedly select the node with the current minimum cost. Update the cost to reach its neighbors if a shorter path is found. This works efficiently in O(m log n) time, where m is the number of edges and n is the number of nodes.

  • Steps:

    1. Build the graph as an adjacency list.

    2. Initialize an array of distances with infinity and set the source distance to 0.

    3. Use a min-heap (priority queue) to process nodes by their current distance.

    4. For each node extracted, iterate over its neighbors and relax the edge.

    5. Stop when the target node is processed or the heap is empty.

    6. Return the distance to the target node (or -1 if unreachable).

Complexity Analysis

  • Time Complexity:
    O(m log n), due to processing each edge with the priority queue operations.

  • Space Complexity:
    O(n + m), to store the graph and the distance array.

Python Code

Python3
Python3

. . . .

Java Code

Java
Java

. . . .

Step-by-Step Walkthrough and Visual Examples

  1. Graph Construction:

    • The graph is built as an adjacency list. For each edge (u, v, cost), we add (v, cost) to the list for node u.
    • In our example, node 0 connects to nodes 1 and 2, and so on.
  2. Initialization:

    • A distance array is initialized where every node’s distance is set to infinity except the source, which is set to 0.
    • A priority queue (min-heap) is used to store pairs of (current cost, current node). The source node is pushed into the heap.
  3. Processing Nodes:

    • The algorithm repeatedly extracts the node with the smallest current cost from the heap.
    • For the extracted node, it checks each neighbor. If the cost to reach a neighbor via this node is lower than the previously recorded cost, update the neighbor's cost and push it into the heap.
    • If the target node is popped from the queue, the algorithm immediately returns the cost (early exit).
  4. Termination:

    • If the heap is exhausted without reaching the target, it indicates that the target is unreachable; hence, return -1.
    • Otherwise, the minimum cost is returned once the target is reached.

Common Mistakes

  • Not Updating the Priority Queue Correctly:
    Ensure that when a shorter path is found, the new cost is pushed into the queue.

  • Handling Unreachable Nodes:
    If the target node is not reachable, make sure to return an appropriate value (such as -1).

  • Graph Representation Errors:
    Carefully build the graph structure so that all edges are correctly represented.

Edge Cases

  • Single Node Graph:
    If the graph contains only one node and the source equals the target, the minimum cost is 0.

  • No Edges:
    If there are no edges, any target node other than the source is unreachable.

  • Cycles:
    The algorithm should correctly handle graphs with cycles as long as all edge weights are non-negative.

TAGS
leetcode
CONTRIBUTOR
Design Gurus Team
-

GET YOUR FREE

Coding Questions Catalog

Design Gurus Newsletter - Latest from our Blog
Boost your coding skills with our essential coding questions catalog.
Take a step towards a better tech career now!
Explore Answers
Aligning coding solutions with performance and scalability targets
What is an industry question answer?
What is normalization in SQL?
Related Courses
Image
Grokking the Coding Interview: Patterns for Coding Questions
Grokking the Coding Interview Patterns in Java, Python, JS, C++, C#, and Go. The most comprehensive course with 476 Lessons.
Image
Grokking Modern AI Fundamentals
Master the fundamentals of AI today to lead the tech revolution of tomorrow.
Image
Grokking Data Structures & Algorithms for Coding Interviews
Unlock Coding Interview Success: Dive Deep into Data Structures and Algorithms.
Image
One-Stop Portal For Tech Interviews.
Copyright © 2025 Design Gurus, LLC. All rights reserved.
;