16. Path With Minimum Effort
The problem can be found at the following link: Question Link
My Approach
Start by defining a class named
Solution
with a public member functionminimumEffortPath
, which takes a 2D vectorheights
as input and returns an integer.Get the dimensions of the
heights
grid:m
represents the number of rows, andn
represents the number of columns.Check if the grid has only one cell (m == 1 and n == 1), return 0 as there is no effort required to move within a single-cell grid.
Create a 2D vector
dist
of sizem x n
to store the minimum effort required to reach each cell from the starting cell. Initialize all values indist
toINT_MAX
except for the starting cell, which is set to 0.Create a
priority_queue
namedpq
to store cells as pairs of (distance, cell), where distance represents the minimum effort to reach that cell, and the cell is represented as (i, j).Define two vectors,
di
anddj
, to represent the four possible directions to move: up, left, down, and right. These vectors will be used to explore neighboring cells.Start a while loop that continues as long as the priority queue
pq
is not empty.Inside the loop, pop the top element from
pq
, which represents the cell with the smallest effort required.Extract the row
i
and columnj
of the current cell from the popped element.Iterate through the four possible directions (up, left, down, right) using a for loop.
For each direction, calculate the new row
ni
and new columnnj
by adding the corresponding values fromdi
anddj
to the current rowi
and columnj
.Check if the new cell (ni, nj) is within the boundaries of the grid (i.e., ni >= 0, nj >= 0, ni < m, and nj < n).
Calculate the new distance
newDist
required to reach the new cell. This distance is the maximum of the current distancedist[i][j]
and the absolute difference in heights between the current cell and the new cellabs(heights[i][j] - heights[ni][nj])
.If the new distance
newDist
is smaller than the current distancedist[ni][nj]
, updatedist[ni][nj]
withnewDist
and push the new cell (ni, nj) into the priority queuepq
with the updated distance.Repeat steps 8-14 until all cells have been processed, ensuring that the priority queue always contains cells with the minimum effort.
Finally, return the minimum effort required to reach the bottom-right cell, which is stored in
dist[m - 1][n - 1]
.
This algorithm uses Dijkstra's algorithm with a priority queue to find the minimum effort path from the top-left corner to the bottom-right corner of the grid while considering the differences in heights between adjacent cells.
Time and Auxiliary Space Complexity
Time Complexity:
O(m*n*log(m*n))
Auxiliary Space Complexity:
O(m*n)
Code (C++)
Contribution and Support
For discussions, questions, or doubts related to this solution, please visit our discussion section. We welcome your input and aim to foster a collaborative learning environment.
If you find this solution helpful, consider supporting us by giving a ⭐ star
to the rishabhv12/Daily-Leetcode-Solution repository.
Last updated