第四章:多維陣列和矩陣 ----------- 4.2 基礎題:將0所在的行列清零

Curtis_發表於2019-03-13

將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;
} 

結果:

 

相關文章