请在 下方输入 要搜索的题目:

在一个4*4的棋盘上,摆放4个旗子,使得棋盘上每一行、每一列、每条斜线(包括主副对角线在内的所有平行线)上只能有一个棋子,求所有的解。要求使用深度搜算dfs算法求解。 算法输入:正整数n(棋盘的行或者列数) 算法输出:按顺序输出每一行的棋子所在的列 输入实例:4 输出实例:2 4 1 3 3 1 4 2

在一个4*4的棋盘上,摆放4个旗子,使得棋盘上每一行、每一列、每条斜线(包括主副对角线在内的所有平行线)上只能有一个棋子,求所有的解。要求使用深度搜算dfs算法求解。 算法输入:正整数n(棋盘的行或者列数) 算法输出:按顺序输出每一行的棋子所在的列 输入实例:4 输出实例:2 4 1 3 3 1 4 2

发布时间:2025-06-26 14:49:12
推荐参考答案 ( 由 快搜搜题库 官方老师解答 )
联系客服
答案:#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; }
专业技术学习
相关试题
专业技术学习
搜搜题库系统