答案:#include #include using namespace std; int sum = 1; int A[200] = { 0 }, B[200] = { 0 }, C[200] = { 0 }, D[200] = { 0 }; //A表示横行,B表示纵行,C表示左上到右下的对角线,D表示 左下到右上的对角线 int n; void print() {
if (sum [ = 3) { for (int i = 1; i <= n; i++) cout << A << " "; cout << endl; } sum++; } void dfs(int i) { if (i]n) { print(); return; } if (i [ = n) { for (int j = 1; j <= n; j++) { if (B[j] != 1 && C[j - i + n] != 1 && D[i + j] != 1) { A = j;//记录纵列的值 B[j] = 1;//标记纵列 C[j - i + n] = 1;//标记对角线左上到右下的对角线 D[i + j] = 1;//标记对角线左下到右上的对角线 dfs(i + 1);//接着搜下一个点 B[j] = 0;//清除记忆 C[j - i + n] = 0; D[j + i] = 0; } } } } int main() { cout << "请输入棋盘的行数或者列数:" << endl; cin ] > n; cout << "所有的解:" << endl; dfs(1); return 0; }