CareerCup_1_7

来源:互联网 发布:2016流行网络用语 编辑:程序博客网 时间:2024/06/06 07:33

Write an algorithm such that if an element in an MxN matrix is 0, its entire row and column are set to 0.

/*Write an algorithm such that if an element in an MxN matrix is 0, its entire row and column are set to 0.*/const int MAX_INT = 0x7FFFFFFF;void SetMatrixZero(int **matrix, int row, int col);void SetMatrixZero2(int **matrix, int row, int col);void TestSetMatrixZero();void PrintMatrix2(int **matrix, int row, int col);

#include <iostream>#include "1_7_SetMatrixZero.h"using namespace std;void SetMatrixZero(int **matrix, int row, int col){for (int i = 0; i < row; ++i){for (int j = 0; j < col; ++j){if (matrix[i][j] == 0){matrix[i][j] = MAX_INT;}}}for (int i = 0; i < row; ++i){for (int j = 0; j < col; ++j){if (matrix[i][j] == MAX_INT){// the same rowfor (int k = 0; k < col; ++k){if (matrix[i][k] != MAX_INT){matrix[i][k] = 0;}}// the same colfor (int k = 0; k < row; ++k){if (matrix[k][j] != MAX_INT){matrix[k][j] = 0;}}matrix[i][j] = 0;}}}}void TestSetMatrixZero(){int row = 4;int col = 3;int **matrix = new int *[4];for (int i = 0; i < row; ++i){matrix[i]= new int[3];}for (int i = 0; i < row; ++i){for (int j = 0; j < col; ++j){matrix[i][j] = i + j + 1;}}matrix[1][1] = 0;//matrix[2][2] = 0;PrintMatrix2(matrix, 4, 3);SetMatrixZero2(matrix, 4, 3);PrintMatrix2(matrix, 4, 3);for (int i = 0; i < row; ++i){delete []matrix[i];}delete[] matrix;}void PrintMatrix2(int **matrix, int row, int col){for (int i = 0; i < row; ++i){for (int j = 0; j < col; ++j){printf("%4d", matrix[i][j]);}cout << endl;}cout << endl;}void SetMatrixZero2(int **matrix, int row, int col){bool *rowFlag = new bool[row];bool *colFlag = new bool[col];memset(rowFlag, 0, sizeof(bool) * row);memset(colFlag, 0, sizeof(bool) * col);for (int i = 0; i < row; ++i){for (int j = 0; j < col; ++j){if (matrix[i][j] == 0){rowFlag[i] = true;colFlag[j] = true;}}}for (int i = 0; i < row; ++i){if (rowFlag[i]){for (int k = 0; k < col; ++k){matrix[i][k] = 0;}}}for (int i = 0; i < col; ++i){if (colFlag[i]){for (int k = 0; k < row; ++k){matrix[k][i] = 0;}}}delete[]rowFlag;delete[]colFlag;}


原创粉丝点击