`
zjxs_sky100
  • 浏览: 30252 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

回溯算法之八皇后

阅读更多
public class EightQueens {



/**
* @param args
*/
public static void main(String[] args) {
QueueTrack queueTrack = new QueueTrack(8);
queueTrack.backTrace(1);
System.out.println("可行方案数:" + queueTrack.getSum());
}

}

class QueueTrack {

private int[] lines;
private int lineNum;
private int sum;

public QueueTrack(int lineNum) {
this.lineNum = lineNum;
lines = new int[this.lineNum + 1];
}

public  void backTrace(int lineIndex) {

if (lineIndex > lineNum) {
sum++;
print();
} else {
/*
* 遍历lineIndex行的4列,判断是否满足8皇后存放要求
*/
for (int i = 1; i <= lineNum; i++) {
lines[lineIndex] = i; //假设放到lineIndex行的i列上

if(!judgePlace(lineIndex)) { //判断是否与已存放的皇后存在规则的冲突
backTrace(lineIndex + 1);
}
}
}
}

private  boolean judgePlace(int lineIndex) {

boolean notPlace = false;
for (int i = 1; i < lineIndex; i++ ) {
if (Math.abs(lineIndex - i) == Math.abs(lines[lineIndex] - lines[i])
|| lines[i] == lines[lineIndex]) {
notPlace = true;
break;
}
}
return notPlace;
}

private  void print() {
for (int i = 1; i < 5; i++) {
System.out.println("line is " + i + " column is " + lines[i]);
}

System.out.println("==============================================");
}

public int getSum() {
return this.sum;
}

}
分享到:
评论

相关推荐

    C语言基于回溯算法解决八皇后问题的方法

    主要介绍了C语言基于回溯算法解决八皇后问题的方法,简单描述了八皇后问题,并结合实例形式分析了C语言使用回溯算法解决八皇后问题的相关操作技巧,需要的朋友可以参考下

    回溯算法(八皇后问题)

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

    回溯算法求解 八皇后问题

    八皇后问题是一个古老而著名的问题,是回溯算法的典型例题。该问题是十九世纪著名的数学家高斯1850年提出:在8X8格的国际象棋上摆放八个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行、同一列或同一斜线...

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

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

    回溯算法八皇后vb6源码

    利用回溯算法解决八皇后的所有摆法,vb6源码可提供vb6学习参考,自己编写开源!

    c#wpf实现用回溯算法解决八皇后问题

    c# wpf 编写的图形界面的经典算法之回溯算法八皇后问题解决。 开发环境:vs2010 压缩工具:快压,需使用快压解压。

    八皇后,Qt界面,回溯算法+概率算法实现,带实验报告。.zip

    回溯算法是一种用于求解问题的搜索技术,适用于解决多解或无解的问题,如八皇后问题。它的工作原理类似于在决策树中进行深度优先搜索。在尝试放置皇后的过程中,如果发现当前位置无法放置,会回溯到前一步,尝试其他...

    回溯算法实现5皇后问题

    在计算机科学中,回溯算法常用于解决约束满足问题,如数独、八皇后问题等。 5皇后问题是一个经典的回溯算法实例,它要求在8x8的棋盘上放置5个皇后,使得任意两个皇后都不能在同一行、同一列或同一条对角线上。这是...

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

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

    八皇后问题c++回溯法

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

    回溯算法的N皇后

    在N皇后问题中,回溯算法扮演了核心角色。 N皇后问题是一个经典的计算机科学问题,要求在N×N的棋盘上放置N个皇后,使得任意两个皇后都无法互相攻击,即任意两个皇后不在同一行、同一列或同一斜线上。这个问题有...

    java实现回溯法求八皇后并打印

    通过回溯算法实现八皇后所有情况,并显示出所有情况的皇后排列位置

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

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

    回溯算法java实例

    八皇后问题则是经典的回溯算法应用例子,目标是在8x8的棋盘上放置8个皇后,使得任意两个皇后都不在同一行、同一列或同一斜线上。这个问题可以通过维护一个表示皇后位置的数组来解决,每行对应一个数组元素,值表示...

    八皇后回溯算法C++

    用c++通过回溯算法编的八皇后计算方法,用Cpp文件格式保存的。

    回溯法实现八皇后,Web版,完全JavaScript实现

    总结起来,这个项目展示了如何利用JavaScript实现经典的八皇后问题,借助回溯算法寻找所有可能的解,并通过VML在IE浏览器中以图形化的方式展示这些解。尽管它的浏览器兼容性有限,但这个项目提供了一个理解回溯算法...

    八皇后_1848_回溯算法;_数据结构_八皇后问题_

    八皇后问题(英文:Eight queens),是由国际西洋棋棋手马克斯·贝瑟尔于1848年提出的问题,是回溯算法的典型案例。问题表述为:在8×8格的国际象棋上摆放8个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一...

    用回溯法解决八皇后问题,包含算法+代码+论文

    用回溯法解决八皇后问题,包含算法+代码+论文,最新的论文,标准模式的论文

    关于回溯算法的几个示例

    这种“走不通就回头”的策略使得回溯算法适用于解决很多组合优化问题,如找零钱问题和八皇后问题。 在找零钱问题中,假设我们有一些面额的硬币,目标是用最少数量的硬币凑出一个给定的金额。回溯算法会尝试所有可能...

Global site tag (gtag.js) - Google Analytics