leetcode 54. Spiral Matrix (矩阵蛇形取数)

Given a matrix of m x n elements (m rows, n columns), return all elements of the matrix in spiral order.

思路:。。。再次让我回想起高一的暑假。。。。

 1/* ***********************************************
 2Author :111qqz
 3Created Time :2017年04月11日 星期二 19时42分05秒
 4File Name :54.cpp
 5************************************************ */
 6class Solution {
 7public:
 8    int n,m; //0123
 9    int cal( int &x,int &y,int dir,vector<vector<bool> > & vis)
10    {
11	if (dir==0)
12	{
13	    if (y<=n-2&&!vis[x][y+1]) y++;
14	    else
15	    {
16		dir++;
17		x++;
18	    }
19	    return dir;
20	}
21	if (dir==1)
22	{
23	    if (x<=m-2&&!vis[x+1][y]) x++;
24	    else
25	    {
26		dir++;
27		y--;
28	    }
29	    return dir;
30	}
31	if (dir==2)
32	{
33	    if (y>=1&&!vis[x][y-1]) y--;
34	    else
35	    {
36		dir++;
37		x--;
38	    }
39	    return dir;
40	}
41	if (dir==3)
42	{
43	    if (x>=1&&!vis[x-1][y]) x--;
44	    else
45	    {
46		dir = 0 ;
47		y++;
48	    }
49	    return dir;
50	}
51    }
52    vector<int> spiralOrder(vector<vector<int>>& matrix) {
53	vector<int>res;
54	m = matrix.size();
55	if (m==0) return res;
56	n = matrix[0].size();
57	if (n==0) return res;
58	vector<vector<bool> >vis(m,vector<bool>(n,false));
59	int x,y,dir;
60	x = y = dir = 0 ;
61	for ( int i = 0 ; i < n*m ;  i++)
62	{
63	    printf("x:%d y:%d\n",x,y);
64	    res.push_back(matrix[x][y]);
65	    vis[x][y] = true;
66	    dir = cal(x,y,dir,vis);
67	}
68	return res;
69    }
70};