Minimum cost to cover the given positions in a N*M grid

Given a n*m grid and the position of some poles to be painted in the grid, the task is to find the minimum cost to paint all the poles. There is no cost involved in moving from the one row to the other, whereas moving to an adjacent column has 1 rupee cost associated with it.

Examples:

Input: n = 2, m = 2, noOfPos = 2
pos[0] = 0, 0
pos[1] = 0, 1

Output: 1
The grid is of 2*2 size and there are two poles at {0, 0} and {0, 1}. 
So we will start at {0, 0} and paint the pole and then go to
the next column to paint the pole at {0, 1} position which will
cost 1 rupee to move one column. 

Input: n = 2, m = 2, noOfPos = 2
pos[0] = {0, 0}
pos[1] = {1, 0}
Output: 0
Both poles are in the same column. So, no need to move to another column.

Approach: As there is the only cost of moving in columns therefore if we go to any column we will paint all the poles in that column and then move forward. So basically the answer will be the difference between the two farthest columns.



Below is the required implementation:

C++

filter_none

edit
close

play_arrow

link
brightness_4
code

// C++ implementation of the above approach
  
#include <iostream>
#include <list>
  
using namespace std;
  
    // Function to find the cost to paint all poles
    void find(int n,int m,int p,int q[2][2])
    {
        // To store all the columns,create list
        list <int> z ;
        int i ;
          
        for(i = 0;i < p;i++)
            z.push_back(q[i][1]);
          
        // sort in ascending order
        z.sort();
          
        // z.back() gives max value
        // z.front() gives min value
        cout << z.back() - z.front() <<endl ;
    }
      
    // Driver code
    int main()
    {
        int n = 2;
        int m = 2;
        int p = 2;
          
        int q[2][2] = {{0,0},{0,1}} ;
          
        find(n, m, p, q);
         
       return 0;
         
    // This code is contributed by ANKITRAI1
    }

chevron_right


Java

filter_none

edit
close

play_arrow

link
brightness_4
code

// Java implementation of the above approach 
  
import java.util.*;
class solution
{
  
    // Function to find the cost to paint all poles 
    static void find(int n,int m,int p,int q[][]) 
    
        // To store all the columns,create list 
        Vector <Integer> z= new Vector<Integer>() ; 
        int i ; 
          
        for(i = 0;i < p;i++) 
            z.add(q[i][1]); 
          
        // sort in ascending order 
        Collections.sort(z); 
          
        // z.back() gives max value 
        // z.front() gives min value 
        System.out.print(z.get(z.size()-1) - z.get(0) ) ; 
    
      
    // Driver code 
    public static void main(String args[])
    
        int n = 2
        int m = 2
        int p = 2
          
        int q[][] = {{0,0},{0,1}} ; 
          
        find(n, m, p, q); 
          
           
    
  
  
  
}
//contributed by Arnab Kundu

chevron_right


Python3

filter_none

edit
close

play_arrow

link
brightness_4
code

# Function to find the cost to paint all poles
import math as ma
  
def find(n, m, p, q):
  
    # To store all the columns
    z =[]
    for i in range(p):
        z.append(q[i][1])
  
    print(max(z)-min(z))
      
n, m, p = 2, 2, 2
q =[(0, 0), (0, 1)]
find(n, m, p, q)

chevron_right


PHP

filter_none

edit
close

play_arrow

link
brightness_4
code

<?php 
// PHP implementation of the above approach
  
// Function to find the cost to
// paint all poles
function find($n, $m, $p, $q)
{
    // To store all the columns, 
    // create an array
    $z = array();
      
    for($i = 0; $i < $p; $i++)
        array_push($z, $q[$i][1]);
      
    // sort in ascending order
    sort($z);
  
    echo max($z) - min($z);
}
  
// Driver code
$n = 2;
$m = 2;
$p = 2;
  
$q = array(array(0, 0),
            array(0, 1));
  
find($n, $m, $p, $q);
  
// This code is contributed by ita_c
?> 

chevron_right


Output:

1


My Personal Notes arrow_drop_up

Check out this Author's contributed articles.

If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

Please Improve this article if you find anything incorrect by clicking on the "Improve Article" button below.





Article Tags :
Practice Tags :


Be the First to upvote.


Please write to us at contribute@geeksforgeeks.org to report any issue with the above content.