将矩阵中元素0所在的行和列置为0

来源:互联网 发布:activiti python 编辑:程序博客网 时间:2024/06/06 06:03

给定一个m*n的矩阵,将矩阵中元素0所在的行和列置为0,比如:

1,2,3,41,0,3,4

2,0,1,3     ==》  0,0,0,0

1,2,3,21,0,1,3

解法一:可以申请两个布尔数组row[m],col[n]保存元素0所在的行列下标。

解法二:

设置两个变量标记第0行和第0列是否有零。
从第一行,第一列开始扫描数组,如果a[i][j]==0,则置a[i][0]=0,a[0][j]=0
再次从第一行,第一列开始扫描数组,如果该行第一个元素或是该列第一个元素为0,就将该元素置为0;再次处理第0行和第0列
空间复杂度为O(1)。
#include<iostream>using namespace std;void Set(int *a,int m,int n){bool row=false,col=false;for(int i=0;i<n;i++)if(a[i]==0){row=true;break;}for(int j=0;j<m;j++)if(a[j*n]==0){col=true;break;}for(i=1;i<m;i++)for(j=1;j<n;j++){if(a[i*n+j]==0){a[i*n]=a[j]=0;}}for(i=1;i<m;i++)for(j=1;j<n;j++)if(a[i*n]==0||a[j]==0)a[i*n+j]=0;if(row){for(j=0;j<n;j++)a[j]=0;}if(col){for(i=0;i<m;i++)a[i*n]=0;}}int main(){int a[3][4]={1,2,3,4,1,3,0,2,1,3,2,1};cout<<"before:"<<endl;for(int i=0;i<3;i++){for(int j=0;j<4;j++)cout<<a[i][j]<<" ";cout<<endl;}Set(*a,3,4);cout<<"after:"<<endl;for(i=0;i<3;i++){for(int j=0;j<4;j++)cout<<a[i][j]<<" ";cout<<endl;}}


0 0
原创粉丝点击