遍历一次矩阵,当遇到元素等于0时,记录下这个元素对应的行和列。可以开一个行数组row和列数组col,当元素a[i][j]等于0时,就把row[i]和col[j]置为true。第二次遍历矩阵时,当某个元素对应的行row[i] 或列col[j]被设置为true,说明该元素在需要被置0的行或列上,因此将它置0。
#include <iostream>
#include <cstring>
using namespace std;
#define Rows 3
#define Columns 4
int main()
{
int a[Rows][Columns] = {{1,2,3,4},{5,6,0,8},{9,10,11,12}};
int i,j;
cout<<"原数组为:"<<endl;
for(i=0;i<Rows;i++)
{
for(j=0;j<Columns;j++)
cout<<a[i][j]<<" ";
cout<<endl;
}
int *row = new int[3];
int *column = new int[4];
memset(row,0,sizeof(row));
memset(column,0,sizeof(column));
for(i=0;i<Rows;i++)
{
for(j=0;j<Columns;j++)
{
if(a[i][j]==0)
{
row[i]=1;
column[j]=1;
}
}
}
for(i=0;i<Rows;i++)
{
for(j=0;j<Columns;j++)
{
if(row[i] || column[j])
a[i][j]=0;
}
}
cout<<"处理后数组为:"<<endl;
for(i=0;i<Rows;i++)
{
for(j=0;j<Columns;j++)
cout<<a[i][j]<<" ";
cout<<endl;
}
return 0;
}