![[leetcode 剑指 Offer 29. 顺时针打印矩阵] 方向保持的DFS](http://pic.ttrar.cn/nice/%5bleetcode%e5%89%91%e6%8c%87.jpg)
![[leetcode 剑指 Offer 29. 顺时针打印矩阵] 方向保持的DFS](https://img-blog.csdnimg.cn/5582057d47f642049bbfe1c24c2fad55.png)
class Solution {
public:const static int Max = 110;int vis[Max][Max];vector<int> ans;void dfs(vector<vector<int>>& matrix ,int x, int y, int dir[4][2], int k, int num) {if(num == matrix.size() * matrix[0].size()) {return ;}ans.push_back(matrix[x][y]);vis[x][y] = 1;int new_x = x + dir[k][0];int new_y = y + dir[k][1];if(new_x >= 0 && new_x < matrix.size() && new_y >= 0 && new_y < matrix[0].size() && vis[new_x][new_y] == 0) {dfs(matrix, new_x, new_y, dir, k, num + 1);}else {k = (k + 1) % 4;int new_x = x + dir[k][0];int new_y = y + dir[k][1];dfs(matrix, new_x, new_y, dir, k, num + 1);}}vector<int> spiralOrder(vector<vector<int>>& matrix) {int dir[][2] = {{0, 1},{1, 0},{0, -1},{-1, 0}};if(matrix.size() != 0)dfs(matrix, 0, 0, dir, 0, 0);return ans;}
};