2664. The Knight’s Tour

```java
class Solution {
    private static final int[][] DIRS = {{ 2, 1}, { 2, -1}, { -2, 1}, { -2, -1}, { 1, 2}, { 1, -2}, { -1, 2}, { -1, -2}};
    public int[][] tourOfKnight(int m, int n, int r, int c) {
        int[][] result = new int[m][n];
        for (int i = 0; i < m; i++) {
            Arrays.fill(result[i], -1);
        }
        dfs(m, n, r, c, result, 0);
        return result;
    }
    private boolean dfs(int m, int n, int r, int c, int[][] result, int order) {
        if (r >= m || r < 0 || c >= n || c < 0 || result[r][c] != -1) {
            return false;
        }
        if (order == m*n-1) {
            result[r][c] = order;
            return true;
        }
            
        result[r][c] = order;
        for (int[] dir: DIRS) {
            if (dfs(m, n, r + dir[0], c + dir[1], result, order+1)) {
                return true;
            }
        }
        result[r][c] = -1;
        return false;
    }
}

/**

T: O((mn)^7)

https://leetcode.com/problems/the-knights-tour/solutions/3486149/java-dfs-w-memo-solution/
 */
```

Last updated