# Path With Maximum And Minimum Value

Posted: 27 Mar, 2021

Difficulty: Easy

#### Given a matrix of integers ‘ARR’ with ‘R’ rows and ‘C’ columns, find the maximum score of a path starting at [0, 0] and ending at [R-1, C-1]. The score of a path is the minimum value in that path. For example, the value of the path 8 -> 4 -> 5 -> 9 is 4. A path moves some number of times from one visited cell to any neighbouring unvisited cell in one of the 4 cardinal directions (north, east, west, south).

#### Example:

```
Let’s say we have ARR = { {5 4 5} , {1 2 6} , {7 4 6}} so the path with
maximum value will be 5 -> 4 -> 5 -> 6 -> 6 and we have to return
the minimum value in this path as the answer i.e 4.
```

##### Input format:

```
The very first line of input contains an integer ‘T’ denoting the number of test cases.
The first line of every test case contains two integers ‘R’ and ‘C’ denoting the number of rows and columns respectively.
Then the remaining input is of R lines where each line contains C space-separated numbers denoting the elements of the RXC sized matrix ‘ARR’.
```

##### Output format:

```
For each test case, return the minimum value in the maximum path.
Output for each test case is printed on a separate line.
```

##### Note:

```
You do not need to print anything, it has already been taken care of. Just return the minimum value in the maximum path.
```

##### Constraints:

```
1 <= T <= 10
1 <= R , C <= 100
0 <= ARR[i][j] <= 10^9
Time Limit: 1 sec
```

Approach 1

**Approach:**

- The idea is to use a max heap which can be implemented by using a max priority queue. In the priority queue, we will push the unvisited neighbours of the current element which is pop out from the queue from all four directions and side by side also maintain the minimum element which is our required answer.

**Algorithm:**

- Create a 2d boolean array ‘VISITED’ of the same size as that of the given ‘ARR’ which value initially ‘False’.
- Next, create a max priority queue ‘PQ’ which will store a pair in which the first one will be the element and the second part will be the indices of the element.
- Push {ARR[0][0] , {0, 0}} into ‘PQ’. Also, create an ‘ANS’ variable to store the answer which is equal to ARR[0][0] initially.
- Now till the priority queue is not empty do the following:
- Pop-out the first element from the queue and store it in ‘P’.
- Take X = P.FIRST and Y = P.SECOND.
- Make VISITED[X][Y] = ‘True’.
- Also update the ‘ANS’ as ANS = min(ANS, A[X][Y]).
- Also, check that if we reach the endpoint that is R-1 and C-1 then break the loop.
- Otherwise, push the element along with its indices of all the unvisited neighbours of the pop-out element into the queue ‘PQ’.

- Finally, return the ‘ANS’ as the required answer.

SIMILAR PROBLEMS

# Implement a priority queue

Posted: 6 Jun, 2021

Difficulty: Moderate

# Maximum Students

Posted: 19 Jun, 2021

Difficulty: Easy

# Matrix Exponentiation

Posted: 27 Jun, 2021

Difficulty: Hard

# Find the N-th term

Posted: 29 Jun, 2021

Difficulty: Hard

# Hat Combination

Posted: 1 Jul, 2021

Difficulty: Hard