`
lknh
  • 浏览: 25989 次
  • 性别: Icon_minigender_1
  • 来自: 广西
社区版块
存档分类
最新评论

回溯法解决n皇后问题

 
阅读更多
/**
 * 
 * @author chenzhuzuo	
 * @version2011.06.21
 * 回溯法求N皇后问题
 *
 */
public class NQueen {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		queen(4);

	}
	/**
	 * 
	 * @param n 有n个皇后
	 */
	private static void queen(int n){
		int result[]= new int [n+1];//result[i]=n表示第i个皇后放在第i行第n列上
		for(int i=0;i<=n;i++){
			result[i]=0;
		}
		int k=1;
		while(k>=1){
			result[k]+= 1;
			while(result[k]<=n){
				if(isOk(result,k))break;
				else result[k]+=1;
			}
			if(k==n&&result[k]<=n){
				for(int i=1;i<=n;i++){
					System.out.print(result[i]+" ");
					
				}
				System.out.println();
				//return;
			}else if(result[k]<=n){
				k=k+1;
			}else{//回溯
				result[k]=0;
				k=k-1;
				
			}
		}
	}
	//放置皇后时判断是否合法
	private static boolean isOk(int a[],int k){
		for(int i=1;i<k;i++){
			if(a[i]==a[k]||Math.abs(k-i)==Math.abs(a[k]-a[i]))return false;
		}
		return true;
	}

}
0
0
分享到:
评论

相关推荐

    回溯法解决N皇后问题

    使用回溯法解决n皇后问题,没有用到栈的结构(但实际算法类似于栈),代码比较简约漂亮

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

    **下面我们将详细探讨如何利用回溯法解决n皇后问题:** 1. **初始化**:首先,我们需要创建一个二维数组表示棋盘,用0表示空位,用1表示已经放置了皇后的位置。 2. **放置皇后**:从棋盘的第一行开始,尝试在每一...

    回溯法解决N皇后问题 Java代码实现

    回溯法解决N皇后问题是一种基于深度优先搜索的策略,用于找到所有可能的解决方案,而不仅仅是第一个找到的解。在N皇后问题中,目标是在一个n×n的棋盘上放置n个皇后,使得任意两个皇后都不会在同一行、同一列或同一...

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

    在本案例中,"回溯法解决n皇后问题"是核心知识点,n皇后问题是经典的计算机科学问题,其目标是在n×n的棋盘上放置n个皇后,使得任何两个皇后都无法在同一行、同一列或同一对角线上攻击彼此。 首先,我们需要理解n...

    python回溯法解决n皇后问题

    python回溯法解决n皇后问题 n=8 #定义n皇后问题中的n maxN=n+5 a=[0 for i in range(1,maxN+1,1)] c=[False for i in range(1,maxN+1,1)] d=[False for i in range(1,2*maxN+1,1)] e=[False for i in range(1,2*maxN...

    用回溯法解决n皇后问题(C#实现)

    **回溯法** ...以上就是关于用C#实现回溯法解决n皇后问题的主要知识点。通过这个实现,我们可以学习到如何运用递归和回溯法来解决复杂的计算问题,以及如何设计算法来避免冲突并找到所有可能的解。

    回溯法实现N皇后问题

    总结,通过回溯法解决N皇后问题,需要理解回溯法的基本思想,实现冲突检测和回溯策略,并能够将算法结果通过Java Swing界面展示出来。提供的压缩包文件可能包含了实现这个功能的源代码,可以进一步学习和理解如何将...

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

    根据给定的信息,本文将详细解释“N皇后问题”及其回溯法求解方案。 ### N皇后问题概述 N皇后问题是指在一个N×N的棋盘上放置N个皇后,使得任意两个皇后都不会互相攻击(即任何两个皇后不能位于同一行、同一列或...

    回溯法n后问题实验报告

    ### 回溯法n后问题实验报告知识点解析 #### 实验背景与目的 - **实验背景**:本实验属于华南师范...实验结果表明,合理利用回溯法可以有效解决n后问题,并且通过对算法的不断优化,可以进一步提高问题的解决效率。

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

    这个压缩包中的"回溯法_N皇后问题"文件可能包含了完整的C++代码实现,通过分析和运行这个代码,你可以更深入地理解如何利用回溯法解决N皇后问题。这种方法不仅锻炼了我们的编程能力,也让我们对回溯法有了更直观的...

    回溯法解决N皇后问题(以四皇后为例)

    以4皇后为例,其他的N皇后问题以此类推。所谓4皇后问题就是求解如何在4×4的棋盘上无冲突的摆放4个皇后棋子。在国际象棋中,皇后的移动方式为横竖交叉的,因此在任意一个皇后所在位置的水平、竖直、以及45度斜线上都...

    n皇后问题--回溯法实验

    **以下是一个简化的C++回溯法解决n皇后问题的思路:** 1. **初始化**:创建一个二维数组表示棋盘,初始化为'.'表示空位,'Q'表示皇后。定义一个变量`n`代表棋盘大小。 2. **核心函数**:定义一个递归函数`...

    回溯法解 N皇后问题

    ### 回溯法解决N皇后问题 #### 一、N皇后问题概述 N皇后问题是一个经典问题:在N×N的棋盘上摆放N个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行、同一列或同一斜线上,问有多少种摆法。 #### 二、...

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

    实验内容包括使用回溯法来解决N皇后问题。回溯法是一种通过尝试所有可能的解决方案并逐步排除无效选项来寻找答案的策略。在N皇后问题中,回溯法通过逐行放置皇后进行尝试,如果当前行的某一列可以放置皇后,则继续向...

    n皇后问题回溯法C++代码

    通过这种方式,我们可以使用C++的回溯法解决N皇后问题,深入理解回溯法的基本思想,并掌握其在实际问题中的应用。这种方法不仅可以解决N皇后问题,还可以扩展到其他类似的问题,如八数码难题、迷宫问题等。

    用回溯法解决八皇后问题C语言实现

    有多种方法解决八皇后问题,在这里我用的是回溯法解决八皇后问题。大家一起来学习呀!!

    n皇后问题回溯法

    ### n皇后问题回溯法解析 #### 一、问题背景及定义 n皇后问题是一个经典的计算机...通过以上分析,我们可以看到回溯法是解决n皇后问题的一种有效方法,而C++语言的强大功能和灵活性使得实现这类算法变得相对简单。

    C#控制台回溯法实现n皇后问题

    在这个项目中,Main方法可能会调用一个专门解决n皇后问题的函数,如`SolveNQueens`。这个函数会递归地尝试在棋盘的每一行放置皇后,并在遇到冲突时回溯。 在实现过程中,我们通常会使用二维数组来表示棋盘,数组的...

    回溯解决N皇后问题

    用回溯法解决N皇后问题,每找到一个排列就将图形输入到文件recall.txt中。当N=15时花费时间100多秒

Global site tag (gtag.js) - Google Analytics