# Find minimum moves to bring all elements in one cell of a matrix

• Difficulty Level : Expert
• Last Updated : 11 May, 2021

Given a matrix mat[][], pair of indices X and Y, the task is to find the number of moves to bring all the non-zero elements of the matrix to the given cell at (X, Y)

A move consists of moving an element at any cell to its four directional adjacent cells i.e., left, right, top, bottom.

Examples:

Input: mat[][] = {{1, 0}, {1, 0}}, X = 1, Y = 1
Output:
Explanation:
Moves required =>
For Index (0, 0) => 2
For Index (1, 0) => 1
Total moves required = 3
Input: mat[][] = {{1, 0, 1, 0}, {1, 1, 0, 1}, {0, 0, 1, 0}}, X = 1, Y = 3
Output: 13

Approach: The idea is to traverse the matrix and for each non-zero element of the matrix find the distance of the current cell(say (A, B)) to the destination cell (X, Y) of the matrix as:

`moves = abs(x - i) + abs(y - j)`

The summation of all the distances by the above formula for all non-zero elements is the required result.
Below is the implementation of the above approach:

## C++

 `// C++ implementation to find the``// minimum number of moves to``// bring all non-zero element``// in one cell of the matrix` `#include ``using` `namespace` `std;` `const` `int` `M = 4;``const` `int` `N = 5;` `// Function to find the minimum``// number of moves to bring all``// elements in one cell of matrix``void` `no_of_moves(``int` `Matrix[M][N],``                ``int` `x, ``int` `y)``{` `    ``// Moves variable to store``    ``// the sum of number of moves``    ``int` `moves = 0;` `    ``// Loop to count the number``    ``// of the moves``    ``for` `(``int` `i = 0; i < M; i++) {` `        ``for` `(``int` `j = 0; j < N; j++) {` `            ``// Condition to check that``            ``// the current cell is a``            ``// non-zero element``            ``if` `(Matrix[i][j] != 0) {``                ``moves += ``abs``(x - i);` `                ``moves += ``abs``(y - j);``            ``}``        ``}``    ``}` `    ``cout << moves << ``"\n"``;``}` `// Driver Code``int` `main()``{``    ``// Coordinates of given cell``    ``int` `x = 3;``    ``int` `y = 2;` `    ``// Given Matrix``    ``int` `Matrix[M][N] = { { 1, 0, 1, 1, 0 },``                        ``{ 0, 1, 1, 0, 1 },``                        ``{ 0, 0, 1, 1, 0 },``                        ``{ 1, 1, 1, 0, 0 } };` `    ``// Element to be moved``    ``int` `num = 1;` `    ``// Function call``    ``no_of_moves(Matrix, x, y);``    ``return` `0;``}`

## Java

 `// Java implementation to find the``// minimum number of moves to``// bring all non-zero element``// in one cell of the matrix``class` `GFG{``    ` `static` `int` `M = ``4``;``static` `int` `N = ``5``;` `// Function to find the minimum``// number of moves to bring all``// elements in one cell of matrix``public` `static` `void` `no_of_moves(``int``[][] Matrix,``                               ``int` `x, ``int` `y)``{``    ` `    ``// Moves variable to store``    ``// the sum of number of moves``    ``int` `moves = ``0``;` `    ``// Loop to count the number``    ``// of the moves``    ``for``(``int` `i = ``0``; i < M; i++)``    ``{``        ``for``(``int` `j = ``0``; j < N; j++)``        ``{``            ` `            ``// Condition to check that``            ``// the current cell is a``            ``// non-zero element``            ``if` `(Matrix[i][j] != ``0``)``            ``{``                ``moves += Math.abs(x - i);``                ``moves += Math.abs(y - j);``            ``}``        ``}``    ``}``    ``System.out.println(moves);``}` `// Driver code``public` `static` `void` `main(String[] args)``{``    ` `    ``// Coordinates of given cell``    ``int` `x = ``3``;``    ``int` `y = ``2``;` `    ``// Given Matrix``    ``int``[][] Matrix = { { ``1``, ``0``, ``1``, ``1``, ``0` `},``                       ``{ ``0``, ``1``, ``1``, ``0``, ``1` `},``                       ``{ ``0``, ``0``, ``1``, ``1``, ``0` `},``                       ``{ ``1``, ``1``, ``1``, ``0``, ``0` `} };` `    ``// Element to be moved``    ``int` `num = ``1``;` `    ``// Function call``    ``no_of_moves(Matrix, x, y);``}``}` `// This code is contributed by divyeshrabadiya07`

## Python3

 `# Python3 implementation to find the``# minimum number of moves to``# bring all non-zero element``# in one cell of the matrix``M ``=` `4``N ``=` `5` `# Function to find the minimum``# number of moves to bring all``# elements in one cell of matrix``def` `no_of_moves(Matrix, x, y):` `    ``# Moves variable to store``    ``# the sum of number of moves``    ``moves ``=` `0` `    ``# Loop to count the number``    ``# of the moves``    ``for` `i ``in` `range``(M):``        ``for` `j ``in` `range``(N):` `            ``# Condition to check that``            ``# the current cell is a``            ``# non-zero element``            ``if` `(Matrix[i][j] !``=` `0``):``                ``moves ``+``=` `abs``(x ``-` `i)``                ``moves ``+``=` `abs``(y ``-` `j)` `    ``print``(moves)` `# Driver Code``if` `__name__ ``=``=` `'__main__'``:``  ` `    ``# Coordinates of given cell``    ``x ``=` `3``    ``y ``=` `2` `    ``# Given Matrix``    ``Matrix ``=` `[ [ ``1``, ``0``, ``1``, ``1``, ``0` `],``               ``[ ``0``, ``1``, ``1``, ``0``, ``1` `],``               ``[ ``0``, ``0``, ``1``, ``1``, ``0` `],``               ``[ ``1``, ``1``, ``1``, ``0``, ``0` `] ]` `    ``# Element to be moved``    ``num ``=` `1` `    ``# Function call``    ``no_of_moves(Matrix, x, y)` `# This code is contributed by mohit kumar 29`

## C#

 `// C# implementation to find the``// minimum number of moves to``// bring all non-zero element``// in one cell of the matrix``using` `System;` `class` `GFG{``    ` `static` `int` `M = 4;``static` `int` `N = 5;` `// Function to find the minimum``// number of moves to bring all``// elements in one cell of matrix``public` `static` `void` `no_of_moves(``int``[,] Matrix,``                               ``int` `x, ``int` `y)``{``    ` `    ``// Moves variable to store``    ``// the sum of number of moves``    ``int` `moves = 0;` `    ``// Loop to count the number``    ``// of the moves``    ``for``(``int` `i = 0; i < M; i++)``    ``{``        ``for``(``int` `j = 0; j < N; j++)``        ``{``            ` `            ``// Condition to check that``            ``// the current cell is a``            ``// non-zero element``            ``if` `(Matrix[i, j] != 0)``            ``{``                ``moves += Math.Abs(x - i);``                ``moves += Math.Abs(y - j);``            ``}``        ``}``    ``}``    ``Console.WriteLine(moves);``}` `// Driver code``public` `static` `void` `Main(String[] args)``{``    ` `    ``// Coordinates of given cell``    ``int` `x = 3;``    ``int` `y = 2;` `    ``// Given matrix``    ``int``[,] Matrix = { { 1, 0, 1, 1, 0 },``                      ``{ 0, 1, 1, 0, 1 },``                      ``{ 0, 0, 1, 1, 0 },``                      ``{ 1, 1, 1, 0, 0 } };` `    ``// Function call``    ``no_of_moves(Matrix, x, y);``}``}` `// This code is contributed by 29AjayKumar`

## Javascript

 ``

Output:

`27`

Time Complexity: O(N2)
Auxiliary Space: O(1)

My Personal Notes arrow_drop_up