Data Structure
Networking
RDBMS
Operating System
Java
MS Excel
iOS
HTML
CSS
Android
Python
C Programming
C++
C#
MongoDB
MySQL
Javascript
PHP
- Selected Reading
- UPSC IAS Exams Notes
- Developer's Best Practices
- Questions and Answers
- Effective Resume Writing
- HR Interview Questions
- Computer Glossary
- Who is Who
Count number of ways to reach a given score in a Matrix in C++
Given a square matrix[][] containing non negative numbers as its elements. Also given a variable score. The goal is to count the ways to reach the given score by adding elements from matrix[][] such that only moves allowed are right moves and down moves.
Starting from matrix[0][0] only moves can be, move to matrix[0][1] ( right move ) or move to matrix[1][0] ( down move ) and add value to reach sum=score.
Let us understand with examples.
For Example
Input - matrix[row][col] = { {1, 1}, { 1, 1} } score=3
Output - Count of number of ways to reach a given score in a Matrix are: 2
Explanation - The score can be reached in following ways:
Way 1: adding element at index (0,0) + (0,1) + (1,1) = 1+1+1 = 3
Way 2: adding element at index (0,0) + (1,0) + (1,1) = 1+1+1 = 3
Input - matrix[row][col] = { {1,1,2},{ 2,1,1}, {1,2,2} } score=7
Output - Count of number of ways to reach a given score in a Matrix are: 2
Explanation - The score can be reached in following ways:
Way 1: adding element at index (0,0) + (0,1) + (1,1) + (1,2) + (2,2) = 1+1+1+2+2 = 7
Way 2: adding element at index (0,0) + (0,1) + (1,1) + (2,1) + (2,2) = 1+1+1+2+2 = 7
Approach used in the below program is as follows
In this approach we will use dynamic programming to solve the problem. We will use two arrays arr[row][col][size] and check[row][col][size].The array check will mark the cells of matrix[][] if they are visited as true. Array arr[][][] is used to store the number of ways to reach a particular cell from matrix[0][0]. Recursively we will calculate the ways.
- Take the 2D array matrix for storing numbers.
- Take variable score as input.
- Take two arrays int arr[row][col][size] and bool check[row][col][size].
- Function matrix_score(int matrix[row][col], int rows, int cols, int sc) is used to return the count of the number of ways to reach a given score in a Matrix.
- If the score sc is less than 0 then return 0. ( To end the recursion or in case of wrong input)
- If the number of rows or columns are less than 0 then return 0. ( to end recursion ).
- If the first cell is equal to the sc (input score) then return 1 as the only way. If it is not then return 0.
- If the current cell is already visited, then return the number of ways at this cell as arr[rows][cols][sc].
- If all above conditions do not hold then mark the current cell as visited. Using check[rows][cols][sc] = true.
- Calculate temp_1 = matrix_score(matrix, rows-1, cols, sc-matrix[rows][cols])
- Calculate temp_2 = matrix_score(matrix, rows, cols-1, sc-matrix[rows][cols])
- Set number of ways as arr[rows][cols][sc] = temp_1 + temp_2.
- At the end return arr[rows][cols][sc].
Example
#include <iostream>
using namespace std;
#define row 2
#define col 2
#define size 30
int arr[row][col][size];
bool check[row][col][size];
int matrix_score(int matrix[row][col], int rows, int cols, int ways) {
if (ways < 0) {
return 0;
}
if (rows < 0 || cols < 0) {
return 0;
}
if (rows == 0) {
if (cols == 0) {
if (ways == matrix[0][0]) {
return 1;
} else {
return 0;
}
}
}
if (check[rows][cols][ways]) {
return arr[rows][cols][ways];
}
check[rows][cols][ways] = true;
int temp_1 = matrix_score(matrix, rows - 1, cols, ways - matrix[rows][cols]);
int temp_2 = matrix_score(matrix, rows, cols - 1, ways - matrix[rows][cols]);
arr[rows][cols][ways] = temp_1 + temp_2;
return arr[rows][cols][ways];
}
int main() {
int matrix[row][col] = {
{
1,
1
},
{
1,
1
}
};
int ways = 3;
cout << "Count of number of ways to reach a given score in a Matrix are: " << matrix_score(matrix, row - 1, col - 1, ways);
return 0;
}
If we run the above code it will generate the following output −
Output
Count of number of ways to reach a given score in a Matrix are: 2