import java.util.Arrays;
public class test {
public static void main(String[] args) {
new test();
}
int count = 0;
public test() {
int N = 6;
int[] a = new int[N];
a[0] = -1;
for (int i = 0; i < N; i++) {
Arrays.fill(a, 1, N, -1);
find(0, a, N);
}
System.out.println(count);
}
public void find(int row, int[] a, int length) {
a[row]++;
for (int i = 0; i <= row - 1; i++) {
if (a[i] == a[row]) {
return;
}
if (Math.abs(i - row) == Math.abs(a[i] - a[row])) {
return;
}
}
if (row + 1 < length) {
for (int i = 0; i < length; i++) {
Arrays.fill(a, row + 2, length, -1);
find(row + 1, a, length);
}
} else {
for (int i = 0; i < length; i++) {
System.out.print(a[i] + "\t");
}
System.out.println();
count++;
}
}
}
N皇后的解的个数,可以参考:
http://bbs.ednchina.com/BLOG_ARTICLE_2129140.HTM
分享到:
相关推荐
主要利用一维数组和下表和它的值巧妙的进行分析,来得出二者之间的关系
主要是用二维数组的方式来进行对问题的求解,用二维数组来绘制每次放置的N皇后,然后再用一个新变量来记录回溯的点
总之,N皇后问题是一个典型的算法问题,通过回溯法和适当的数据结构(如二维数组或一维数组)可以有效地找出所有可能的解决方案。在C++中,可以利用其强大的库支持来实现这些算法。在实际编程过程中,理解如何有效地...
n皇后问题是在一个n×n的棋盘上放置n个皇后,要求任何两个皇后不能处于同一行、同一列或同一对角线上。** **C++是实现这一算法的理想选择,它是一种静态类型的、编译式的、通用的、大小写敏感的、不仅支持过程化...
2. **记录皇后位置**:使用一维数组`col[N]`来记录每个皇后所在的列号。例如`col[i] = u`表示第`i`行的皇后位于第`u`列。 3. **安全性检测函数**:`safetyPlace(int x, int y)`函数用于判断当前位置`(x, y)`是否...
该问题的解决需要使用回溯法,首先初始化一个一维数组,数组的下标表示皇后所在的行,数组元素的值表示皇后所在的列。然后,使用回溯法逐个试出每个皇后的合法位置,如果达到n仍未找到合法位置,那么置当前行的皇后...
1. **数组和二维数组**:N皇后问题通常用二维数组来表示棋盘,其中0代表空位,1代表皇后的位置。在C/C++中,可以声明一个N*N的二维数组来存储棋盘状态。 2. **回溯算法**:回溯是一种试探性的解题方法,当尝试一种...
N皇后问题是计算机科学中一个经典的回溯算法问题,它的目标是在一个n×n的棋盘上放置n个皇后,使得任何两个皇后都不会在同一行、同一列或同一对角线上互相攻击。这个问题展示了如何通过编程来解决约束冲突的问题,...
首先,我们需要创建一个二维数组表示棋盘,并用0和1标记当前位置是否可以放置皇后。初始化时,所有位置都可以放置,即全为0。然后,我们从第一行开始,尝试在每一行放置一个皇后,并确保它不与之前放置的皇后冲突。...
在编程实现中,通常使用二维数组或列表来表示棋盘,其中的元素值为1表示该位置有皇后,0表示空位。我们可以使用递归函数来实现回溯过程,递归函数的参数包括当前行号和已放置皇后的列位置。每次递归调用时,都尝试在...
通常,我们会用二维数组来表示棋盘,用一维数组或者枚举值来记录皇后的位置。在C++中,可以定义一个二维数组如`int board[n][n]`,其中`board[i][j] = 1`表示第i行第j列放置了一个皇后,`board[i][j] = 0`则表示空位...
N 皇后算法 十二个不同的代码 我和同学解决N皇后问题的...包括有栈实现,和一维数组实现 和一维动态数组实现 和二维数组实现。 还有收录了两个来自于网上的算法也就是我们所参考的算法。 一个为剪枝法,一个为回溯法
- 使用一个一维数组表示皇后的位置,数组索引代表行,值代表列。 - 定义一个递归函数,接收当前处理的行数作为参数。 - 在递归函数内部,遍历所有可能的列,尝试放置皇后。 - 使用辅助函数检查当前行的皇后位置是否...
通常,可以使用一维数组或二维数组来表示棋盘。在Qt应用中,可以创建一个QVector来存储每一行皇后的位置,或者用QList来保存所有可能的解。这样的数据结构方便进行回溯操作,同时支持快速的行、列和对角线检查。 **...
非递归的解决方案通常基于回溯思想,我们可以使用一个二维数组来表示棋盘状态,一个一维数组存储当前皇后的位置。首先,我们在第一行放置一个皇后,然后逐行向后推进,每次尝试在新的一行放置一个皇后,如果当前位置...
在C++中解决N皇后问题,我们需要定义一个二维数组来表示棋盘,并用一个一维数组记录皇后的位置。接下来,我们可以通过递归的方式来实现回溯法。递归函数的主要任务是放置当前皇后并检查是否冲突,如果冲突则回溯到上...
而N皇后问题则使用一维数组或布尔数组来记录棋盘状态。两者都需要良好的空间和时间复杂度考虑,以确保算法的效率。 总结起来,0/1背包问题和N皇后问题在计算机科学领域具有重要地位,它们展示了动态规划和回溯法的...
在C++实现中,可以使用`std::queue`来存储待处理的状态,使用二维数组或`std::vector<std::vector<int>>`来表示棋盘状态。为了提高效率,可以使用位运算来表示行、列和对角线的冲突检查,以及用一个整数表示当前行...
1. **数据结构**:一般用一维数组表示棋盘,数组的每个元素代表对应列是否放置了皇后。 2. **递归函数**:创建一个递归函数,参数为当前处理的行号和数组状态。 3. **放置皇后**:在当前行的每个位置尝试放置皇后,...
- **定义变量**:每个皇后的位置可以用一维数组表示,数组元素的值对应于棋盘上的列。 - **定义约束**:每一对皇后之间的行、列和对角线关系构成约束。 - **冲突计算**:计算每个皇后与其他皇后在行、列和对角线上的...