使用C++写一个解决八皇后问题的程序
时间: 2023-03-22 12:00:56 浏览: 100
您好,以下是使用C语言编写的八皇后问题的程序示例:
```c
#include <stdio.h>
#define N 8 // N代表八皇后问题中的皇后数量
int queen[N] = {0}; // 用一个一维数组表示八皇后问题中每一行皇后所在的列数
void print_result() // 打印八皇后问题的解
{
int i, j;
for (i = 0; i < N; i++) {
for (j = 0; j < N; j++) {
if (queen[i] == j)
printf("Q ");
else
printf("* ");
}
printf("\n");
}
printf("\n");
}
int check(int n) // 判断第n行皇后是否和前面的皇后冲突
{
int i;
for (i = 0; i < n; i++) {
if (queen[i] == queen[n] || n - i == queen[n] - queen[i] || n - i == queen[i] - queen[n])
return 0; // 存在冲突,返回0
}
return 1; // 没有冲突,返回1
}
void solve(int n) // 解决八皇后问题
{
int i;
if (n == N) { // 八个皇后已经放好
print_result(); // 打印结果
return;
}
for (i = 0; i < N; i++) { // 尝试将第n个皇后放在每一列
queen[n] = i;
if (check(n))
solve(n + 1); // 继续放下一个皇后
}
}
int main()
{
solve(0); // 从第0行开始放置皇后
return 0;
}
```
该程序使用回溯算法来解决八皇后问题。其中,使用一个一维数组queen来表示每一行皇后所在的列数。在solve函数中,对于第n个皇后,尝试将其放在每一列,如果不与前面的皇后冲突,则继续放下一个皇后。如果放好了八个皇后,则打印结果。check函数用于判断第n行皇后是否和前面的皇后冲突。print_result函数用于打印八皇后问题的解。
阅读全文