本文主要是介绍矩阵清零,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
我的思路是:用一个[2]×[300]的矩阵去记录哪一行哪一列应该全是0;然后再进行分别对行和列(2*n)复杂度,进行赋0操作,这样就完成了。
下面是一个类,后面我会给一个完整的程序实例。
class Clearer {
public:vector<vector<int> > clearZero(vector<vector<int> > A, int n) {// write code hereint B[2][300]={0};for(int i=0;i<n;i++){for(int j=0;j<n;j++){if(A[i][j]==0){B[0][i]=1;B[1][j]=1;}}}for(int i=0;i<n;i++){if(B[0][i]){for(int j=0;j<n;j++){A[i][j]=0; } } }for(int i=0;i<n;i++){if(B[1][i]){for(int j=0;j<n;j++){A[j][i]=0; }} }return A;}
};
完整程序实例:
#include<cstdio> #include<iostream> #include<cstdlib> using namespace std; int main() {int A[4][4]={{0,1,2,3},{7,0,1,2},{9,0,0,1},{1,2,3,4}};int B[2][300]={0}; int n=4;for(int i=0;i<n;i++){for(int j=0;j<n;j++){if(A[i][j]==0){B[0][i]=1;B[1][j]=1;}}}for(int i=0;i<n;i++){if(B[0][i]){for(int j=0;j<n;j++){A[i][j]=0; } } }for(int i=0;i<n;i++){//对行进行清0操作if(B[1][i]){for(int j=0;j<n;j++){A[j][i]=0; } } }for(int i=0;i<n;i++)//对列进行清0操作{for(int j=0;j<n;j++) { printf("%d ",A[i][j]); } printf("\n"); }return 0; }
这篇关于矩阵清零的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!