Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <vector>
- using namespace std;
- void setZeroes(vector<vector<int>>& matrix) {
- int rows = matrix.size();
- if (rows==0)
- return;
- int cols = matrix[0].size();
- //first handle headers
- bool fillFirstCol = false; //can't use [0][0] marker for both cols and rows
- for (int r=0; r<rows; ++r) {
- if (matrix[r][0]==0) fillFirstCol = true;
- }
- for (int c=1; c<cols; ++c) {
- if (matrix[0][c]==0) matrix[0][0]=0;
- }
- for (int r=1; r<rows; ++r) {
- for (int c=1; c<cols; ++c) {
- if (matrix[r][c]==0) {
- matrix[r][0] = 0;
- matrix[0][c] = 0;
- }
- }
- }
- for (int r=1; r<rows; ++r) {
- for (int c=1; c<cols; ++c) {
- if (matrix[r][c]!=0 && (matrix[r][0]==0 || matrix[0][c]==0))
- matrix[r][c] = 0;
- }
- }
- //now fill headers (rows and columns).
- for (int c=1; c<cols; ++c) {
- if (matrix[0][0]==0) matrix[0][c]=0;
- }
- for (int r=0; r<rows; ++r) {
- if (fillFirstCol) matrix[r][0]=0;
- }
- }
- void printv(const vector<vector<int>>& m) {
- for (int r=0; r<m.size(); ++r) {
- for (int c=0; c<m[0].size(); ++c)
- cout << m[r][c] << " ";
- cout << "\n";
- }
- }
- int main() {
- vector<vector<int>> m {{1,1,1},{1,0,1},{1,1,1}}; //{{1,1,1},{0,1,2}}; //{{0,1}}; //{{0,1,2,0},{3,4,5,2},{1,3,1,5}};
- setZeroes(m);
- printv(m);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement