剑指offer-顺时针打印矩阵

2016/05/24 C和C++基础

题目描述

输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下矩阵: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 则依次打印出数字1,2,3,4,8,12,16,15,14,13,9,5,6,7,11,10.

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

vector<int> printMatrix(vector<vector<int> > matrix){
	bool m=true;
	vector<vector<int> > vec;
	vector<int> r;
	vec=matrix;
	for(int i=0;i<vec.size();i++)
		for(int j=0;j<vec[i].size();j++)
			vec[i][j]=0;

	int x=0,y=0;
	int h=vec.size();
	int w=vec[0].size();
	while(m){
		m=false;
		for(;y<w;y++){                            //向左查找
			if(vec[x][y]==1)
				break;
			r.push_back(matrix[x][y]);
			vec[x][y]=1;
			m=true;
		}

		y--;                                      //向下查找
		x++;
		for(;x<h;x++){
			if(vec[x][y]==1)
				break;
			r.push_back(matrix[x][y]);
			vec[x][y]=1;
			m=true;
		}

		x--;                                      //向右查找
		y--;
		for(;y>=0;y--){
			if(vec[x][y]==1)
				break;
			r.push_back(matrix[x][y]);
			vec[x][y]=1;
			m=true;
		}

		x--;                                      //向上查找
		y++;
		for(;x>=0;x--){
			if(vec[x][y]==1)
				break;
			r.push_back(matrix[x][y]);
			vec[x][y]=1;
			m=true;
		}

		x++;
		y++;
	}
	return r;
}

int main(){
	int a1[4]={1,2,3,4};
	int a2[4]={5,6,7,8};
	int a3[4]={9,10,11,12};
	int a4[4]={13,14,15,16};
	vector<int> vec1(a1,a1+4);
	vector<int> vec2(a2,a2+4);
	vector<int> vec3(a3,a3+4);
	vector<int> vec4(a4,a4+4);
	vector<vector<int> > matrix;
	matrix.push_back(vec1);
	matrix.push_back(vec2);
	matrix.push_back(vec3);
	matrix.push_back(vec4);
	printMatrix(matrix);
	system("pause");
}

Search

    Post Directory