第四章:多维数组和矩阵 ----------- 4.2 基础题:将0所在的行列清零
将0所在的行列清零:
#include<iostream>
#include<vector>
using namespace std;
void solve(vector<vector<int> > matrix,int rowLen,int colLen)
{
//记录哪些行出现了0
int rowRecord[rowLen];
for(int i=0;i<rowLen;i++)
{
rowRecord[i]=0;
}
//记录哪些列出现了0
int colRecord[colLen];
for(int i=0;i<rowLen;i++)
{
colRecord[i]=0;
}
for(int i=0;i<rowLen;i++)
{
for(int j=0;j<colLen;j++)
{
//如果有元素为0,则标记行号、列号
if(matrix[i][j]==0)
{
rowRecord[i]=1;
colRecord[j]=1;
}
}
}
//赋值0
for(int i=0;i<rowLen;i++)
{
for(int j=0;j<colLen;j++)
{
if(rowRecord[i]==1||colRecord[j]==1)
{
matrix[i][j]=0;
}
}
}
//打印清零后的结果
for(int i=0;i<rowLen;i++)
{
for(int j=0;j<colLen;j++)
{
cout<<matrix[i][j]<<" ";
}
cout<<endl;
}
}
int main()
{
vector<vector<int> > arr;
int row=4,col=5;
//二维向量赋初值
for(int i=0,k=1;i<row;i++)
{
vector<int> temp;
for(int j=0;j<col;j++)
{
if((i==1&&j==1)||(i==2&&j==3)||(i==3&&j==4))
{
temp.push_back(0);
k++;
}
else
{
temp.push_back(k);
k++;
}
}
arr.push_back(temp);
}
//打印二维向量
for(int i=0;i<row;i++)
{
for(int j=0;j<col;j++)
{
cout<<arr[i][j]<<" ";
}
cout<<endl;
}
cout<<endl;
solve(arr,row,col);
return 0;
}
结果: