Use this to learn the idea, then write your own version.
123 45class Solution {6public:7 vector<vector<int>> tourOfKnight(int m, int n, int r, int c) {8 static const vector<pair<int, int>> DIRECTIONS = {{1, 2}, {-1, 2}, {1, -2}, {-1, -2},9 {2, 1}, {-2, 1}, {2, -1}, {-2, -1}};10 11 vector<vector<int>> result(m, vector<int>(n, -1));12 result[r][c] = 0;13 const function<bool(int, int, int)> backtracking = [&](int r, int c, int i) {14 const auto& degree = [&](const auto& x) {15 int cnt = 0;16 const auto& [r, c] = x;17 for (const auto& [dr, dc] : DIRECTIONS) {18 const int nr = r + dr, nc = c + dc;19 if (0 <= nr && nr < m && 0 <= nc && nc < n && result[nr][nc] == -1) {20 ++cnt;21 }22 }23 return cnt;24 };25 26 if (i == m * n) {27 return true;28 }29 vector<pair<int, int>> candidates;30 for (const auto& [dr, dc] : DIRECTIONS) {31 const int nr = r + dr, nc = c + dc;32 if (0 <= nr && nr < m && 0 <= nc && nc < n && result[nr][nc] == -1) {33 candidates.emplace_back(nr, nc);34 }35 }36 sort(begin(candidates), end(candidates), [&](const auto& a, const auto& b) {37 return degree(a) < degree(b);38 });39 for (const auto& [nr, nc] : candidates) { 40 result[nr][nc] = i;41 if (backtracking(nr, nc, i + 1)) {42 return true;43 }44 result[nr][nc] = -1;45 }46 return false;47 };48 49 backtracking(r, c, 1);50 return result;51 }52};53 54555657class Solution2 {58public:59 vector<vector<int>> tourOfKnight(int m, int n, int r, int c) {60 static const vector<pair<int, int>> DIRECTIONS = {{1, 2}, {-1, 2}, {1, -2}, {-1, -2},61 {2, 1}, {-2, 1}, {2, -1}, {-2, -1}};62 63 vector<vector<int>> result(m, vector<int>(n, -1));64 result[r][c] = 0;65 const function<bool(int, int, int)> backtracking = [&](int r, int c, int i) {66 if (i == m * n) {67 return true;68 }69 for (const auto& [dr, dc] : DIRECTIONS) {70 const int nr = r + dr, nc = c + dc;71 if (!(0 <= nr && nr < m && 0 <= nc && nc < n && result[nr][nc] == -1)) {72 continue;73 }74 result[nr][nc] = i;75 if (backtracking(nr, nc, i + 1)) {76 return true;77 }78 result[nr][nc] = -1;79 }80 return false;81 };82 83 backtracking(r, c, 1);84 return result;85 }86};87