`
kevin_in_java
  • 浏览: 30264 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论

回溯法-八皇后问题

阅读更多
本例以八皇后为例,可推广位n皇后
解向量 s{s0,s1,s2,s3,s4,s5,s6,s7}
显示约束 0=<s[i]<8
隐式约束 各元素不能相等,且s[index]-s[i]!=index-i,注意取绝对值
树。。表示不知道用什么工具画。八叉树,回溯时候注意条件判断
递归出口,当第八个棋子成功放下。
思路:
回溯是优化的穷举。。肯定要遍历所有值,for(int i;i<s.length;i++)
每放一枚棋子的处理情况都相同,判断是否可以放下(显示约束,隐式约束条件)
另外。。八皇后问题,因为棋盘是正方形,实际求出23个解其他对称就可得到全部的92个解。不过代码上进行动态优化有点麻烦。。回溯熟练再研究,晾着

package cn.edu.cqupt.huisu;

public class Queen {
private int num;
private int s[] = null;
private int count ;
public Queen(int count)
{
this.count= count;
s=new int[count];
for(int i=0;i<count;i++)
{
s[i]=-1;
}
}
public void queen(int n)
{
if(n==count)
{
num++;
printResult();
return ;
}
for(int i=0;i<count;i++)
{
s[n]=i;
if(isFit(n))
queen(n+1);
}
}

public boolean isFit(int index)
{
for(int i=0;i<index;i++)
{
if(s[i]==s[index])
return false;
if(Math.abs(s[index]-s[i])==index-i)
return false;
}
return true;
}
public void printResult()
{
System.out.print("num "+num+" :");
for(int i =0; i<s.length;i++)
System.out.print(s[i]+"\t");
System.out.println();
}
public static void main(String args[])
{
Queen q =new Queen(4);
q.queen(0);
}
}
1
1
分享到:
评论

相关推荐

    回溯法-N皇后问题_N皇后回溯法C++_

    在计算机科学中,尤其在解决约束满足问题(如拼图、八数码难题等)时,回溯法是一种非常有效的工具。 N皇后问题是一个经典的回溯法应用实例。这个问题要求在n×n的棋盘上放置n个皇后,使得任意两个皇后都不能在同一...

    八皇后问题c++回溯法

    经典的算法,八皇后问题,c++实现,回溯法

    回溯法解决八皇后问题的程序源码(c++)

    小弟申请ID不久,资源分用的很快,自己写点程序借此赚分以备使用。初出茅庐,学识尚浅。请各路朋友多多指点,不胜感激。

    回溯法解八皇后问题 vc++实现

    回溯法解八皇后问题.有源代码,能运行成功,标准的vc++实现

    使用回溯法求解八皇后问题

    回溯法回溯法回溯法回溯法回溯法回溯法回溯法回溯法回溯法回溯法回溯法回溯法回溯法

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

    **回溯法是一种重要的算法策略,常用于解决组合优化问题,如八皇后问题、迷宫寻路等。在这个场景中,我们关注的是“n皇后问题”。n皇后问题是在一个n×n的棋盘上放置n个皇后,要求任何两个皇后不能处于同一行、同一...

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

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

    回溯算法--解决 八皇后 四色图 背包

    回溯算法--解决 八皇后 四色图 背包 自己改写的程序 回溯算法--解决 八皇后 四色图 背包 自己改写的程序

    回溯法解八皇后问题.图形实现

    ### 回溯法解八皇后问题:图形实现详解 #### 回溯法概念与应用 回溯法是一种解决约束满足问题的算法,尤其在解决排列组合类问题时表现出色。其核心思想是尝试构建问题的解空间树,并通过深度优先搜索(DFS)策略...

    回溯法解决八皇后问题

    ### 回溯法解决八皇后问题 #### 一、回溯法概述 ##### (一)回溯法的基本概念 回溯法是一种通过不断尝试解决问题的方法,尤其适用于解决那些解空间非常大、可以通过穷举法来寻找解的问题。这种方法的核心在于...

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

    利用回溯法解决8皇后问题,简单并且和很好理解!

    八皇后问题 回溯法:八皇后问题,一个经典问题

    回溯法:八皇后问题,一个经典问题 "八皇后问题"是在国际象棋棋盘上放置八个皇后,使她们不能相吃.国际象棋中的皇后可以吃掉与她处于同一行,同一列,同一对角线上的棋子.因此每一行只能摆放一个皇后.因共有八行,所以每...

    利用回溯算法实现八皇后问题

    利用回溯算法设八皇后问题,掌握回溯法的基本思想和算法设计的基本步骤。注意回溯算法解决此问题要找出问题所有的可行解。

    回溯法解决八皇后问题.思想及代码

    回溯法解决八皇后问题.思想及代码

    C#回溯法8皇后问题-实验报告+程序

    使用C#编写回溯法解决8皇后问题的实验报告和程序 有图形界面,可以查看任意一种解法

    C++回溯法解决八皇后问题-源码

    最近负责招聘,面试别人的时候自己也温习一下算法,呵呵,就用C++随便写了一个 呵呵

    回溯算法(八皇后问题)

    回溯算法(八皇后问题) 绝对可以运行 c语言

    java求解n queques 问题-八皇后问题

    利用回溯法求解八皇后问题,从八皇后问题延伸到n皇后问题。利用水平,主对角线,反对角线三个数组简化算法。 使用方法: 输入要求解的n皇后数目,程序自动输出每种具体方案和总的方法数。

    C语言课程设计--八皇后问题

    八皇后问题可以通过回溯法来解决。回溯法是一种通过试探解决问题的方法,如果发现当前的解不可行,则退回一步重新选择。在这个问题中,可以采用以下策略: - 每一行只放置一个皇后,这样可以减少不必要的计算。 - ...

Global site tag (gtag.js) - Google Analytics