admin管理员组文章数量:1532709
2024年5月1日发(作者:)
八皇后问题是一个经典的回溯算法问题。下面是一个使用C语言实现的简单算法:
c
#include
#include
#define N 8
int col[N] = {0}; // 表示皇后所在的列
int queens[N][N] = {0}; // 存储棋盘状态
bool is_valid(int row, int col) {
for (int i = 0; i < row; i++) {
复制代码
if (queens[i][col] || queens[i][col - (row - i)] || queens[i][col + (row -
i)]) {
return false;
}
}
return true;
}
void backtrack(int row) {
if (row == N) { // 找到了一组解
for (int i = 0; i < N; i++) {
for (int j = 0; j < N; j++) {
printf("%d ", queens[i][j]);
}
printf("n");
}
return;
}
for (int col = 0; col < N; col++) {
if (is_valid(row, col)) { // 如果当前位置是合法的,则放置皇后
queens[row][col] = 1;
col[row] = col; // 记录每行皇后所在的列
backtrack(row + 1); // 继续放下一行的皇后
queens[row][col] = 0; // 回溯,撤销当前位置的皇后
}
}
}
int main() {
backtrack(0); // 从第0行开始放皇后
return 0;
}
在上面的代码中,我们使用一个一维数组
col
来记录每一行皇后所在的列。在
is_valid
函数中,我们检
查当前位置是否合法,即与前面的皇后不冲突。如果当前位置是合法的,则放置皇后,并递归地调用
backtrack
函数来放置下一行的皇后。如果找到了一组解,则输出棋盘状态。回溯是通过在
backtrack
函
数中撤销当前位置的皇后来实现的。
版权声明:本文标题:c++八皇后问题最简单算法 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:https://m.elefans.com/dongtai/1714551778a410731.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论