/*******************************************************
1.7
Write an algorithm such that if an element in an MxN matrix is 0, its entire row and
column is set to 0
Note: Some elements does not be read into the Matrix. Rather, they are replaced with 0.
Complexity: O(m * n)
Mod Time: 4.23, 2012
Copyright: Ben
*******************************************************/
#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>
#define MAX_ROW 500
#define MAX_COL 500
int Mat[MAX_ROW][MAX_COL];
bool ZeroRow[MAX_ROW]; //not necessary, any row that should be cleared 0 can be cleared at that time
bool ZeroCol[MAX_COL];
int NRow, NCol;
void ClearRow(int row);
void ClearColJ_BeforeI(int row, int col);
int main(void)
{
int i, j;
freopen("Matrix.txt", "r", stdin);
//number of rows and columns in a matrix.
scanf("%d", &NRow);
scanf("%d", &NCol);
//initialize
for(i = 0; i < NRow; i++)
{
ZeroRow[i] = false;
}
for(i = 0; i < NCol; i++)
{
ZeroCol[i] = false;
}
for(i = 0; i < NRow; i++)
{
for(j = 0; j < NCol; j++)
{
scanf("%d", &Mat[i][j]); //this should unconditionally work otherwise the file pointer is not correct
if(ZeroCol[j])
{
Mat[i][j] = 0;
}
else
{
if(Mat[i][j] == 0)
{
ZeroRow[i] = true;
ZeroCol[j] = true;
ClearColJ_BeforeI(i,j);
}
}
}
if(ZeroRow[i])
{
ClearRow(i);
}
}
for(i = 0; i < NRow; i++)
{
for(j = 0; j < NCol; j++)
{
printf("%d\t", Mat[i][j]);
}
printf("\n");
}
fclose(stdin);
return 0;
}
void ClearRow(int row)
{
int j;
for(j = 0; j < NCol; j++)
{
Mat[row][j] = 0;
}
}
//clear j col of first row rows.
void ClearColJ_BeforeI(int row, int col)
{
int i;
for(i = 0; i < row; i++)
{
Mat[i][col] = 0;
}
}
1.7
Write an algorithm such that if an element in an MxN matrix is 0, its entire row and
column is set to 0
Note: Some elements does not be read into the Matrix. Rather, they are replaced with 0.
Complexity: O(m * n)
Mod Time: 4.23, 2012
Copyright: Ben
*******************************************************/
#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>
#define MAX_ROW 500
#define MAX_COL 500
int Mat[MAX_ROW][MAX_COL];
bool ZeroRow[MAX_ROW]; //not necessary, any row that should be cleared 0 can be cleared at that time
bool ZeroCol[MAX_COL];
int NRow, NCol;
void ClearRow(int row);
void ClearColJ_BeforeI(int row, int col);
int main(void)
{
int i, j;
freopen("Matrix.txt", "r", stdin);
//number of rows and columns in a matrix.
scanf("%d", &NRow);
scanf("%d", &NCol);
//initialize
for(i = 0; i < NRow; i++)
{
ZeroRow[i] = false;
}
for(i = 0; i < NCol; i++)
{
ZeroCol[i] = false;
}
for(i = 0; i < NRow; i++)
{
for(j = 0; j < NCol; j++)
{
scanf("%d", &Mat[i][j]); //this should unconditionally work otherwise the file pointer is not correct
if(ZeroCol[j])
{
Mat[i][j] = 0;
}
else
{
if(Mat[i][j] == 0)
{
ZeroRow[i] = true;
ZeroCol[j] = true;
ClearColJ_BeforeI(i,j);
}
}
}
if(ZeroRow[i])
{
ClearRow(i);
}
}
for(i = 0; i < NRow; i++)
{
for(j = 0; j < NCol; j++)
{
printf("%d\t", Mat[i][j]);
}
printf("\n");
}
fclose(stdin);
return 0;
}
void ClearRow(int row)
{
int j;
for(j = 0; j < NCol; j++)
{
Mat[row][j] = 0;
}
}
//clear j col of first row rows.
void ClearColJ_BeforeI(int row, int col)
{
int i;
for(i = 0; i < row; i++)
{
Mat[i][col] = 0;
}
}