- - 模拟题
const int MAXN = 1000;
const int dx[] = {0, 1, 0, -1};
const int dy[] = {1, 0, -1, 0};
int n, m;
int vis[MAXN][MAXN];
vector<int> ans;
vector<vector<int> > matrix;
void dfs(int r, int c, int p){
vis[r][c] = 1;
ans.push_back(matrix[r][c]);
for(int i = 0; i < 4; ++ i){
int nowp = p + i & 3;
int nr = r + dx[nowp];
int nc = c + dy[nowp];
if(nr >= 0 && nr < n)
if(nc >= 0 && nc < m)
if(!vis[nr][nc]){
dfs(nr, nc, nowp);
break;
}
}
}
class Solution {
public:
vector<int> spiralOrder(vector<vector<int> > &matrix) {
// Start typing your C/C++ solution below
// DO NOT write int main() function
memset(vis, 0x00, sizeof(vis));
ans.clear();
::matrix = matrix;
if(matrix.size() <= 0 || matrix[0].size() <= 0)
return ans;
n = matrix.size();
m = matrix[0].size();
dfs(0, 0, 0);
return ans;
}
};