编写一个算法,若M*N矩阵中某个元素为0,则将其所在的行和列清零。
解答:用两个辅助数组分别存放元素为0的矩阵的行数和列数,然后再将这些行和列清零。
void Reset(int *a,int m,int n)
{
int i,j;
bool *col=new bool[m];
for(i=0;i<m;i++)
col[i]=false;
bool *row=new bool[n];
for(i=0;i<n;i++)
row[i]=false;
cout<<endl;
for(i=0;i<m;i++)
for(j=0;j<n;j++)
if(a[i*n+j]==0)
{
col[i]=true;
row[j]=true;
}
for(i=0;i<m;i++)
for(j=0;j<n;j++)
if(col[i]||row[j])
a[i*n+j]=0;
}
注意:不能在遍历矩阵时,将元素为0的行和列清零,否则,会变成零矩阵。