#include <stdio.h>
void setZeroes(int matrix[][3], int rows, int cols) {
int first_row_zero = 0;
int first_col_zero = 0;
// Check if first row has zero
for (int j = 0; j < cols; j++) {
if (matrix[0][j] == 0) {
first_row_zero = 1;
break;
}
}
// Check if first column has zero
for (int i = 0; i < rows; i++) {
if (matrix[i][0] == 0) {
first_col_zero = 1;
break;
}
}
// Use first row and column as markers
for (int i = 1; i < rows; i++) {
for (int j = 1; j < cols; j++) {
if (matrix[i][j] == 0) {
matrix[i][0] = 0;
matrix[0][j] = 0;
}
}
}
// Zero rows based on markers
for (int i = 1; i < rows; i++) {
if (matrix[i][0] == 0) {
for (int j = 1; j < cols; j++) {
matrix[i][j] = 0;
}
}
}
// Zero columns based on markers
for (int j = 1; j < cols; j++) {
if (matrix[0][j] == 0) {
for (int i = 1; i < rows; i++) {
matrix[i][j] = 0;
}
}
}
// Zero first row if needed
if (first_row_zero) {
for (int j = 0; j < cols; j++) {
matrix[0][j] = 0;
}
}
// Zero first column if needed
if (first_col_zero) {
for (int i = 0; i < rows; i++) {
matrix[i][0] = 0;
}
}
}
void printMatrix(int matrix[][3], int rows, int cols) {
for (int i = 0; i < rows; i++) {
for (int j = 0; j < cols; j++) {
printf("%d", matrix[i][j]);
if (j < cols - 1) printf(" ");
}
printf("\n");
}
}
int main() {
int matrix[3][3] = {
{1, 2, 3},
{4, 0, 6},
{7, 8, 9}
};
setZeroes(matrix, 3, 3);
printMatrix(matrix, 3, 3);
return 0;
}for (int j = 0; j < cols; j++) { if (matrix[0][j] == 0) first_row_zero = 1; }
Check if first row contains zero to zero it later
for (int i = 0; i < rows; i++) { if (matrix[i][0] == 0) first_col_zero = 1; }
Check if first column contains zero to zero it later
for (int i = 1; i < rows; i++) for (int j = 1; j < cols; j++) if (matrix[i][j] == 0) { matrix[i][0] = 0; matrix[0][j] = 0; }
Mark rows and columns to zero using first row and column
for (int i = 1; i < rows; i++) if (matrix[i][0] == 0) for (int j = 1; j < cols; j++) matrix[i][j] = 0;
Zero rows based on markers
for (int j = 1; j < cols; j++) if (matrix[0][j] == 0) for (int i = 1; i < rows; i++) matrix[i][j] = 0;
Zero columns based on markers
if (first_row_zero) for (int j = 0; j < cols; j++) matrix[0][j] = 0;
Zero first row if needed
if (first_col_zero) for (int i = 0; i < rows; i++) matrix[i][0] = 0;
Zero first column if needed