Open In App

C++ program to Convert a Matrix to Sparse Matrix

Improve
Improve
Like Article
Like
Save
Share
Report

Given a matrix with most of its elements as 0, convert this matrix to sparse matrix in C++
Examples: 

Input: Matrix:
0 1 1
1 2 2
2 1 3
3 2 5
4 3 4
Output: Sparse Matrix: 
0 1 0 0 
0 0 2 0 
0 3 0 0 
0 0 5 0 
0 0 0 4
Explanation:
Here the Sparse matrix is represented
in the form Row Column Value

Hence the row 0 1 1 means that the value
of the matrix at row 0 and column 1 is 1

Approach:  

  1. Get the matrix with most of its elements as 0.
  2. Create a new 2D array to store the Sparse Matrix of only 3 columns (Row, Column, Value).
  3. Iterate through the Matrix, and check if an element is non zero. In this case insert this element into the Sparse Matrix.
  4. After each insertion, increment the value of variable length(here ‘len’). This will serve as the row dimension of the Sparse Matrix
  5. Print the Dimension of the Sparse Matrix and its elements.

CPP




// C++ program to convert a Matrix
// into Sparse Matrix
 
#include <iostream>
using namespace std;
 
// Maximum number of elements in matrix
#define MAX 100
 
// Array representation
// of sparse matrix
//[][0] represents row
//[][1] represents col
//[][2] represents value
int data[MAX][3];
 
// total number of elements in matrix
int len;
 
// insert elements into sparse matrix
void insert(int r, int c, int val)
{
    // insert row value
    data[len][0] = r;
 
    // insert col value
    data[len][1] = c;
 
    // insert element's value
    data[len][2] = val;
 
    // increment number of data in matrix
    len++;
}
 
// printing Sparse Matrix
void print()
{
    cout << "\nDimension of Sparse Matrix: "
         << len << " x " << 3;
    cout << "\nSparse Matrix: \nRow Column Value\n";
 
    for (int i = 0; i < len; i++) {
 
        cout << data[i][0] << " "
             << data[i][1] << " "
             << data[i][2] << "\n";
    }
}
 
// Driver code
int main()
{
    int i, j;
    int r = 5, c = 4;
 
    // Get the matrix
    int a[r] = { { 0, 1, 0, 0 },
                    { 0, 0, 2, 0 },
                    { 0, 3, 0, 0 },
                    { 0, 0, 5, 0 },
                    { 0, 0, 0, 4 } };
 
    // print the matrix
    cout << "\nMatrix:\n";
    for (i = 0; i < r; i++) {
        for (j = 0; j < c; j++) {
            cout << a[i][j] << " ";
        }
        cout << endl;
    }
 
    // iterate through the matrix and
    // insert every non zero elements
    // in the Sparse Matrix
    for (i = 0; i < r; i++)
        for (j = 0; j < c; j++)
            if (a[i][j] > 0)
                insert(i, j, a[i][j]);
 
    // Print the Sparse Matrix
    print();
 
    return 0;
}


Output: 

Matrix:
0 1 0 0 
0 0 2 0 
0 3 0 0 
0 0 5 0 
0 0 0 4 

Dimension of Sparse Matrix: 5 x 3
Sparse Matrix: 
Row Column Value
0 1 1
1 2 2
2 1 3
3 2 5
4 3 4

 

Time complexity: O(m*n) where m is no of rows and n is no of columns of matrix

Auxiliary Space: O(MAX)



Last Updated : 11 Jul, 2022
Like Article
Save Article
Previous
Next
Share your thoughts in the comments
Similar Reads