20170729_vector二维数组的应用

20170729_vector二维数组的应用


#include<iostream>
#include<vector>
using namespace std;

vector<vector<int>>  Solution(const vector<vector<int>> &matrix)
{
	vector<vector<int>> result;
	int m=matrix.size();		//二维数组的行数
	int n=matrix[0].size();		//二维数组的列数
	if(m==0 || n==0)
		return result;

	int flag=n-1,min=n;
	for(int i=0; i<n; ++i)
	{
		if (matrix[0][i]==1)
		{
			flag=i;
			vector<int> temp;
			temp.push_back(1);			//第一行
			temp.push_back(n-flag);		//n-flag个1
			result.push_back(temp);

			min=flag;					//第一行1出现的标志位
			break;
		}
	}

	for (int i=1; i<m; ++i)
	{
		if(matrix[i][flag]==1)						//不等于1的就不用考虑了,因为1的数量肯定比第一行少
		{
			while(matrix[i][flag]==1 && flag>=0)
				flag--;
			flag++;									//找到该行的第一个1的位置

			if(flag<min)	//该行的1的数量 多于 第一行
			{
				min=flag;
				vector<int> temp;
				temp.push_back(i+1);
				temp.push_back(n-flag);

				result.clear();			//清空之前存储的temp
				result.push_back(temp);
			}
			else if(flag==min)	//该行的1的数量 等于 第一行
			{
				vector<int> temp;
				temp.push_back(i+1);
				temp.push_back(n-flag);
				result.push_back(temp);
			}
		}
	}
	return result;
}

int main(void)
{
	vector<vector<int>> matrix(6,vector<int>(12, 0));	//定义二维数组,所有元素初始化为0
	int  m[6][12]={
					0,0,0,0,0,0,0,0,1,1,1,1,
					0,0,0,0,0,0,0,0,1,1,1,1,
					0,0,0,0,0,0,0,0,1,1,1,1,
					0,0,0,0,0,0,1,1,1,1,1,1,
					0,0,0,0,0,0,0,0,1,1,1,1,
					0,0,0,0,0,0,1,1,1,1,1,1 };
	for(int i=0; i<6; ++i)
		for(int j=0; j<12; ++j)
			matrix[i][j]=m[i][j];

	vector<vector<int>> result=Solution(matrix);
	for(auto row:result)
	{
		for(auto mem:row)
			cout<<mem<<" ";
		cout<<endl;
	}
	cout<<endl;

	system("pause");
	return 0;
}



相关推荐
©️2020 CSDN 皮肤主题: 黑客帝国 设计师:白松林 返回首页