对于八皇后问题的优化,可以尝试使用剪枝技巧来减少搜索空间,以提高程序的效率。下面是对你给出的代码进行简单的优化:#include <iostream>using namespace std;int map[20][20], n, ans, out[3][20];// 剪枝函数,判断当前位置是否可以放置皇后bool isSafe(int row, int col) { for (int i = 0; i < col; i++) { if (map[row][i]) return false; } for (int i = row, j = col; i >= 0 && j >= 0; i--, j--) { if (map[i][j]) return false; } for (int i = row, j = col; i < n && j >= 0; i++, j--) { if (map[i][j]) return false; } return true;}void dfs(int col) { if (col == n) { for (int i = 0; i < n; i++) { if (!map[i][col - 1]) { if (ans < 3) out[ans][i] = col; ans++; } } } else { for (int i = 0; i < n; i++) { if (isSafe(i, col)) { map[i][col] = 1; if (ans < 3) { out[ans][col] = i + 1; } dfs(col + 1); map[i][col] = 0; } } }}int main() { ios::sync_with_stdio(false); cin.tie(0), cout.tie(0); cin >> n; dfs(0); for (int i = 0; i < 3; i++) { for (int j = 0; j < n; j++) { cout << out[i][j] << " "; } cout << endl; } cout << ans << endl; return 0;}
这里主要的优化点是使用isSafe()函数来判断当前位置是否可以放置皇后,避免不必要的搜索。同时,去掉了对change()函数的调用,简化了代码结构。
希望这些优化能够帮助你通过更多的测试用例!如有任何问题,请随时向我提问。 |