题解:
cpp
class Solution
{
int n,m;
bool st[100][100];
int flag;
int dx[8]={-1,-2,-2,-1,1,2,2,1};
int dy[8]={-2,-1,1,2,2,1,-1,-2};
public:
bool checkValidGrid(vector<vector<int>>& grid)
{
m = grid.size();
n = grid[0].size();
dfs(grid,0,0,0);
return flag;
}
void dfs(vector<vector<int>>& grid,int i,int j,int u)
{
st[i][j] = true;
if(grid[i][j] != u) return;
if(grid[i][j] == n * m -1)//遍历完所有数组了就可以返回了
{
flag = true;
return;
}
for(int k=0;k<8;k++)
{
int x=i+dx[k];
int y=j+dy[k];
if(x>=0 && x<n && y>=0 && y<m && !st[x][y])
{
st[x][y]=true;
dfs(grid,x,y,u+1);
st[x][y]=false;
}
}
}
};