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

N皇后(有误)

阅读更多
//A1.java

public class A1 {

	private final static int N = 5;

	public static void main(String[] args) {
		exec();
	}

	// 执行
	public static void exec() {
		int a[][] = new int[N][N];

		for (int i = 0; i < N; i++) {
			reset(a);
			a[0][i] = 1;
			int b = 1;
			for (int j = 1; j < N; j++) {
				int c = 0;
				for (int k = 0; k < N; k++) {
					if (check(a, j, k)) {
						a[j][k] = 1;
						c = 1;
						break;
					}
				}
				if (c == 0) {
					b = 0;
					break;
				}

			}
			if (b == 1) {
				printResult(a);
			}
		}
	}

	// 检查
	public static boolean check(int a[][], int j, int k) {
		// 左上
		for (int i = 1; j - i >= 0 && k - i >= 0; i++) {
			if (a[j - i][k - i] == 1) {
				return false;
			}
		}
		// 正上
		for (int i = 1; j - i >= 0; i++) {
			if (a[j - i][k] == 1) {
				return false;
			}
		}
		// 右上
		for (int i = 1; j - i >= 0 && k + i < N; i++) {
			if (a[j - i][k + i] == 1) {
				return false;
			}
		}
		return true;
	}

	// 显示结果
	public static void printResult(int a[][]) {
		for (int i = 0; i < N; i++) {
			for (int j = 0; j < N; j++) {
				if (a[i][j] == 1) {
					System.out.print("(" + i + "," + j + ") ");
				}
			}
		}
		System.out.println();
	}

	// 数组全部置0
	public static void reset(int a[][]) {
		for (int i = 0; i < N; i++) {
			for (int j = 0; j < N; j++) {
				a[i][j] = 0;
			}
		}
	}
}

 

运行结果:

 

(0,0) (1,2) (2,4) (3,1) (4,3)
(0,1) (1,3) (2,0) (3,2) (4,4)
(0,2) (1,0) (2,3) (3,1) (4,4)
(0,3) (1,0) (2,2) (3,4) (4,1)

分享到:
评论

相关推荐

    MFC实现n皇后算法(附报告)

    在本项目中,我们主要探讨的是“MFC实现n皇后算法”,这是一个经典的计算机科学问题,源自于著名的八皇后问题。八皇后问题要求在8×8的棋盘上摆放8个皇后,使得任意两个皇后都无法在同一行、同一列或对角线上相互...

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

    n皇后问题有多个解,因此我们需要继续寻找,直到所有的解都被找到。 6. **终止条件**:当遍历到棋盘的最后一行并且成功放置了皇后,那么就找到了一个解。如果所有可能的皇后位置都被尝试过,但没有找到合适的,就...

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

    该函数通过遍历之前放置的皇后,检查是否有冲突发生(同行、同列或同对角线)。 4. **递归放置皇后**:`queen(int i)`函数实现了递归放置皇后的逻辑。当所有行都放置完毕时(`i == N`),输出当前棋盘状态;否则,...

    n皇后问题实验报告

    ### N皇后问题实验报告知识点解析 #### 一、实验目的及要求 本次实验的主要目的是让学生通过实际编程操作,深入理解并解决N皇后问题。实验要求包括以下几点: 1. **了解皇后相互攻击的条件**:当两个皇后位于同一...

    N皇后问题摆法算法描述

    N皇后问题是一个经典的计算机科学问题,它源自国际象棋,目标是在一个N×N的棋盘上摆放N个皇后,使得任何两个皇后都无法通过同一行、同一列或同一对角线互相攻击。这个问题展示了如何利用回溯算法或者深度优先搜索...

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

    **n皇后问题**是计算机科学中的一个经典问题,它的目标是在一个n×n的棋盘上放置n个皇后,使得任何两个皇后都不会在同一行、同一列或同一对角线上相互攻击。这个问题通常用来演示回溯算法和深度优先搜索(DFS)在...

    n皇后问题C++源码

    n皇后问题C++源码。{典型的8皇后问题的扩展)

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

    n皇后问题是一个在n×n棋盘上放置n个皇后,使得皇后之间不能互相攻击的问题。这里的“攻击”指的是皇后可以沿着行、列或对角线攻击到其他皇后。 n皇后问题的解决方案要求在棋盘的每一行只能放一个皇后,同时确保...

    遗传算法n皇后

    该资源为遗传算法代码,主要用遗传算法来实现n皇后 ,效率较高

    数据结构C语言的n皇后算法

    N 皇后问题的算法优化主要通过递归来进行计算,微小的改进都会在 N 皇后问题中有显著的提高。以下是基于 C 语言的几方面的优化: 2.1 对称改进 因为 N 皇后的棋盘是个 N×N 的对称的棋盘,所以可以只依次进行 N/2 ...

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

    每个节点有两个子节点,分别表示在当前行放置皇后后,下一行的两种可能布局:一是皇后放在列的左边,二是放在列的右边。 分支限界法的基本步骤如下: 1. **初始化队列**:创建一个队列,将初始状态(例如,第一行...

    N皇后问题C++代码

    N皇后问题是计算机科学中的一种经典问题,旨在在N*N的棋盘上摆放N个皇后,使得每个皇后不在同一行、同一列或同一对角线上。下面是使用C++语言实现的N皇后问题的解决方案。 类的设计 在解决N皇后问题时,我们可以...

    N皇后随机算法

    《N皇后问题与随机算法解析》 在计算机科学领域,N皇后问题是一个经典的回溯算法应用实例,它源自19世纪的数学家欧拉提出的一个挑战。问题的设定是在一个N×N的棋盘上放置N个皇后,要求任意两个皇后不能处于同一行...

    用vb实现N皇后问题

    vb实现N皇后问题,操作简单,容易理解!

    n皇后问题c++实现

    is_conflict函数用于检查第n行的皇后与前n-1行的皇后是否有冲突,print_board函数用于输出皇后的排列。init_board函数用于初始化棋盘,所有皇后都在第0列。queen函数是解决N皇后问题的核心函数,使用回溯法尝试每个...

    n皇后的c语言实现

    n皇后的c语言实现

    用栈求解n皇后问题 ,经典的回溯算法问题

    n 皇后问题是一道经典的回溯算法问题,其目标是在一个 � × � n×n 的棋盘上放置 � n 个皇后,使得任意两个皇后都不能在同一行、同一列或同一斜线上。 栈可以用来辅助实现回溯算法,本质上就是手动维护了递归...

    N皇后C++代码

    ### N皇后问题与局部搜索算法 #### 一、N皇后问题概述 N皇后问题是一个经典的计算机科学问题,其目标是在N×N的棋盘上放置N个皇后,使得任何两个皇后都不在同一行、同一列或同一对角线上。这个问题不仅在计算机...

    算法分析与设计实验五 N皇后-实验报告.docx

    《算法分析与设计实验五 N皇后》实验报告主要围绕N皇后问题展开,旨在让学生掌握回溯递归算法和迭代算法的设计与实现,并通过N皇后问题的实际解决,理解回溯法的核心思想。N皇后问题是一个经典的计算机科学问题,...

    图形化N皇后问题解法及分析实验

    八皇后问题是一个以国际象棋为背景的问题:如何能够在8×8的国际象棋棋盘上放置八个皇后,使得任何一个皇后都无法直接吃掉其他的皇后?为了达到此目的,任两个皇后都不能处于同一...当且仅当n = 1或n ≥ 4时问题有解。

Global site tag (gtag.js) - Google Analytics