`
lylegend13
  • 浏览: 82774 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

一维数组,N皇后

    博客分类:
  • Java
 
阅读更多

 

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皇后问题(二维数组)

    主要是用二维数组的方式来进行对问题的求解,用二维数组来绘制每次放置的N皇后,然后再用一个新变量来记录回溯的点

    N皇后问题 数据结构 用回溯法和栈解决 c++

    总之,N皇后问题是一个典型的算法问题,通过回溯法和适当的数据结构(如二维数组或一维数组)可以有效地找出所有可能的解决方案。在C++中,可以利用其强大的库支持来实现这些算法。在实际编程过程中,理解如何有效地...

    利用回溯法解决n皇后问题

    n皇后问题是在一个n×n的棋盘上放置n个皇后,要求任何两个皇后不能处于同一行、同一列或同一对角线上。** **C++是实现这一算法的理想选择,它是一种静态类型的、编译式的、通用的、大小写敏感的、不仅支持过程化...

    n 皇后问题n 皇后 回溯法n 皇后 回溯法

    2. **记录皇后位置**:使用一维数组`col[N]`来记录每个皇后所在的列号。例如`col[i] = u`表示第`i`行的皇后位于第`u`列。 3. **安全性检测函数**:`safetyPlace(int x, int y)`函数用于判断当前位置`(x, y)`是否...

    n皇后问题c++实现

    该问题的解决需要使用回溯法,首先初始化一个一维数组,数组的下标表示皇后所在的行,数组元素的值表示皇后所在的列。然后,使用回溯法逐个试出每个皇后的合法位置,如果达到n仍未找到合法位置,那么置当前行的皇后...

    N皇后问题 C/C++实现

    1. **数组和二维数组**:N皇后问题通常用二维数组来表示棋盘,其中0代表空位,1代表皇后的位置。在C/C++中,可以声明一个N*N的二维数组来存储棋盘状态。 2. **回溯算法**:回溯是一种试探性的解题方法,当尝试一种...

    N皇后问题C#

    N皇后问题是计算机科学中一个经典的回溯算法问题,它的目标是在一个n×n的棋盘上放置n个皇后,使得任何两个皇后都不会在同一行、同一列或同一对角线上互相攻击。这个问题展示了如何通过编程来解决约束冲突的问题,...

    用栈的n皇后问题源码+流程图

    首先,我们需要创建一个二维数组表示棋盘,并用0和1标记当前位置是否可以放置皇后。初始化时,所有位置都可以放置,即全为0。然后,我们从第一行开始,尝试在每一行放置一个皇后,并确保它不与之前放置的皇后冲突。...

    算法设计与分析 回溯法 n皇后问题

    在编程实现中,通常使用二维数组或列表来表示棋盘,其中的元素值为1表示该位置有皇后,0表示空位。我们可以使用递归函数来实现回溯过程,递归函数的参数包括当前行号和已放置皇后的列位置。每次递归调用时,都尝试在...

    回溯法解决n皇后问题纯c++编写

    通常,我们会用二维数组来表示棋盘,用一维数组或者枚举值来记录皇后的位置。在C++中,可以定义一个二维数组如`int board[n][n]`,其中`board[i][j] = 1`表示第i行第j列放置了一个皇后,`board[i][j] = 0`则表示空位...

    N 皇后算法 C+的代码

    N 皇后算法 十二个不同的代码 我和同学解决N皇后问题的...包括有栈实现,和一维数组实现 和一维动态数组实现 和二维数组实现。 还有收录了两个来自于网上的算法也就是我们所参考的算法。 一个为剪枝法,一个为回溯法

    C#实现-回溯求解-N皇后

    - 使用一个一维数组表示皇后的位置,数组索引代表行,值代表列。 - 定义一个递归函数,接收当前处理的行数作为参数。 - 在递归函数内部,遍历所有可能的列,尝试放置皇后。 - 使用辅助函数检查当前行的皇后位置是否...

    利用Qt实现的N皇后算法

    通常,可以使用一维数组或二维数组来表示棋盘。在Qt应用中,可以创建一个QVector来存储每一行皇后的位置,或者用QList来保存所有可能的解。这样的数据结构方便进行回溯操作,同时支持快速的行、列和对角线检查。 **...

    n皇后非递归 c++源码实现

    非递归的解决方案通常基于回溯思想,我们可以使用一个二维数组来表示棋盘状态,一个一维数组存储当前皇后的位置。首先,我们在第一行放置一个皇后,然后逐行向后推进,每次尝试在新的一行放置一个皇后,如果当前位置...

    c++ 用回溯法解决经典的N皇后问题

    在C++中解决N皇后问题,我们需要定义一个二维数组来表示棋盘,并用一个一维数组记录皇后的位置。接下来,我们可以通过递归的方式来实现回溯法。递归函数的主要任务是放置当前皇后并检查是否冲突,如果冲突则回溯到上...

    0/1背包算法和N皇后求解

    而N皇后问题则使用一维数组或布尔数组来记录棋盘状态。两者都需要良好的空间和时间复杂度考虑,以确保算法的效率。 总结起来,0/1背包问题和N皇后问题在计算机科学领域具有重要地位,它们展示了动态规划和回溯法的...

    n皇后问题(队列分支限界法)

    在C++实现中,可以使用`std::queue`来存储待处理的状态,使用二维数组或`std::vector&lt;std::vector&lt;int&gt;&gt;`来表示棋盘状态。为了提高效率,可以使用位运算来表示行、列和对角线的冲突检查,以及用一个整数表示当前行...

    C语言解决n皇后问题 例如八皇后问题 列出所有解的情况

    1. **数据结构**:一般用一维数组表示棋盘,数组的每个元素代表对应列是否放置了皇后。 2. **递归函数**:创建一个递归函数,参数为当前处理的行号和数组状态。 3. **放置皇后**:在当前行的每个位置尝试放置皇后,...

    CSP最小冲突法解决n皇后问题

    - **定义变量**:每个皇后的位置可以用一维数组表示,数组元素的值对应于棋盘上的列。 - **定义约束**:每一对皇后之间的行、列和对角线关系构成约束。 - **冲突计算**:计算每个皇后与其他皇后在行、列和对角线上的...

Global site tag (gtag.js) - Google Analytics