放着,继续想,怎么弄出来的

tech2025-09-14  5

bool check(int* visited, int row, int col) { for (int i = 0; i < row; i++) if (col == visited[i] || row + col == (visited[i] + i) || row - col == i - visited[i]) return false; return true; } void backtrack(int n, int row, int* visited, char*** result, int* returnSize) { if (row == n) { result[*returnSize] = (char**)malloc(n * sizeof(char*)); for (int i = 0; i < n; i++) { result[*returnSize][i] = (char*)calloc(n + 1, sizeof(char)); memset(result[*returnSize][i], '.', n); result[*returnSize][i][visited[i]] = 'Q'; } (*returnSize)++; return; } for (int i = 0; i < n; i++) { if (!check(visited, row, i)) continue; visited[row] = i; backtrack(n, row + 1, visited, result, returnSize); // visited[row] = 0; //此句无关紧要,但是回溯的思想 } } char*** solveNQueens(int n, int* returnSize, int** returnColumnSizes) { *returnSize = 0; int* visited = (int*)calloc(n, sizeof(int)); char*** result = (char***)malloc(n * n * n * sizeof(char**)); backtrack(n, 0, visited, result, returnSize); *returnColumnSizes = (int*)malloc(*returnSize * sizeof(int)); for (int i = 0; i < *returnSize; i++) (*returnColumnSizes)[i] = n; return result; }

 

最新回复(0)