Zero out the corresponding rows and columns of a 2D matrix if any element is zero
/*
* ZeroRowsAndColumns.cpp
*
* Created on: Apr 13, 2012
* Author: Kiran Hegde
*/
#include <iostream>
#include <cstdlib>
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
using namespace std;
/**
* If any element of the matrix is zero, then make the entire row and column
* zero too
*/
void zeroOutRowsAndColumsOfMatrix(int m, int n, int ** &matrix) {
/*If any row or column needs to be zeroed out, the value will be
initialized to true */
bool *row = new bool[m];
bool *column = new bool[n];
//initialize row and column arrays to false
for (int i = 0; i < m; i++)
row[i] = false;
for (int j = 0; j < n; j++)
column[j] = false;
//set the row and column array to true if a zero is found in that row, column
for (int i = 0; i < m; i++) {
for (int j = 0; j < n; j++) {
if (matrix[i][j] == 0) {
row[i] = true;
column[j] = true;
}
}
}
/*if any row or column was true, all elements of the matrix for that
row or column is set to zero */
for (int i = 0; i < m; i++) {
for (int j = 0; j < n; j++) {
if (row[i] || column[j]) {
matrix[i][j] = 0;
}
}
}
//release memory
delete[] row;
delete[] column;
}
void generateRandomMatrix(int m, int n, int ** &matrix) {
//initialize a random seed
srand(time(NULL));
for (int i = 0; i < m; i++) {
for (int j = 0; j < n; j++) {
matrix[i][j] = rand() % 9 + 1; //generate a random number from 1 to 9
}
}
//introduce a couple of zeros
int count = 0;
while (count < 2) {
int rowIndex = rand() % m; //random index between 0 and m - 1
int colIndex = rand() % n; //random index between 0 and n - 1
matrix[rowIndex][colIndex] = 0;
count++;
}
}
void printMatrix(int m, int n, int ** &matrix) {
cout << "Matrix: " << endl;
for (int i = 0; i < m; i++) {
for (int j = 0; j < n; j++) {
cout << matrix[i][j] << " ";
}
cout << endl;
}
cout << endl;
}
/**
* Test the code
*/
int main() {
const int width = 10;
const int height = 10;
//allocate space for 2D array
int **matrix = new int* [width];
for (int i=0; i<width; i++) {
matrix[i] = new int[height];
}
generateRandomMatrix(width, height, matrix);
printMatrix(width, height, matrix);
zeroOutRowsAndColumsOfMatrix(width, height, matrix);
printMatrix(width, height, matrix);
//delete 2D array
for (int i=0; i<width; i++)
delete [] matrix[i];
delete [] matrix;
}