#include <iostream> #include <cmath> using namespace std; #define N 9 int q[N] = {0}; int ans = 0; bool judge(int row, int col) { if (q[row] != 0) return false; else { for (int i = 1; i <= 8; i++) { if (q[i] != 0) { if ((abs(i - row) == abs(q[i] - col)) || q[i] == col) return false; } } } return true; } void queen(int row) { if (row > 8) ans++; else { if (q[row]) queen(row + 1); else { for (int col = 1; col <= 8; col++) { bool flag = judge(row, col); if (flag) { q[row] = col; queen(row + 1); q[row] = 0; } } } } } int main() { int temp; for (int i = 1; i <= 8; i++) for (int j = 1; j <= 8; j++) { cin >> temp; if (temp) q[i] = j; } ans = 0; queen(1); cout << ans << endl; return 0; }
时间: 2024-03-19 11:42:32 浏览: 23
这段代码实现了八皇后问题的求解,但是它的思路是回溯法,效率较低。具体来说,这段代码的主要过程如下:
1.输入一个8x8的矩阵,其中1表示皇后的位置,0表示空位。
2.使用递归函数queen(row)来求解,其中row表示当前要放置皇后的行数。
3.queen(row)函数中,如果row>8,表示所有皇后都已经放置成功,此时ans++,表示找到了一种解法。
4.如果q[row]不等于0,表示当前行已经放置了皇后,则直接递归到下一行queen(row+1)。
5.如果q[row]等于0,则需要在当前行选择一个合适的列col来放置皇后。具体来说,遍历当前行的所有列,对于每一列col,都判断是否合法。如果合法,则将皇后放在该列,继续递归求解queen(row+1),然后再将该列上的皇后移除,继续遍历下一列。如果所有列都遍历完了,还没有找到合适的位置,则回溯到上一层,重新选择位置。
6.最终输出ans,表示所有解法的数量。
需要注意的是,这段代码中用到了全局变量q和ans,不太规范。另外,虽然八皇后问题的解法数量较少,回溯法也能够解决,但是对于更复杂的问题,回溯法可能会超时或者无法求解,需要使用更高效的算法。
相关问题
#include <iostream> #include<algorithm> #include<cmath> #include <queue> using namespace std;
#include <iostream>:这是C++标准库中的头文件,用于输入输出流操作,包括cin、cout等。
#include<algorithm>:这是C++标准库中的头文件,用于提供各种算法操作,如排序、查找等。
#include<cmath>:这是C++标准库中的头文件,用于提供数学函数操作,如绝对值、平方根等。
#include <queue>:这是C++标准库中的头文件,用于提供队列操作,包括入队、出队等。
using namespace std;:这是C++的命名空间声明,表示使用std命名空间,可以直接使用std中的函数和对象。
#include<iostream> #include<cstdio> using namespace std;是什么意思
#include<iostream> #include<cstdio> using namespace std; 是C++中的预处理指令,用于引入头文件和命名空间。
1. #include<iostream> 是引入iostream头文件,其中包含了输入输出流的定义,例如cout和cin等。
2. #include<cstdio> 是引入cstdio头文件,其中包含了C语言标准输入输出函数的定义,例如printf和scanf等。
3. using namespace std; 是使用std命名空间,std是C++标准库的命名空间,其中包含了很多常用的函数和类。
这些预处理指令的作用是为了在程序中能够使用输入输出流和标准库函数,使得程序更加方便和简洁。
相关推荐
![text/plain](https://img-home.csdnimg.cn/images/20210720083646.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)