- 浏览: 30252 次
- 性别:
- 来自: 杭州
文章分类
最新评论
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;
}
}
/**
* @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;
}
}
发表评论
-
aaaaaaaaaaaa
2014-08-30 09:01 0111111111111111 -
struts2与checkbox的关系
2014-03-25 15:35 623Struts2 框架对checkbox的处理 1、 对于htm ... -
doc命令之关机管理
2014-03-21 09:26 686@echo off set /p p=是否关机(1:关机 2: ... -
金字塔最短路径
2014-03-18 10:02 576class Triangle { private int[] ... -
汉诺塔递归算法
2014-03-15 10:49 580class Hanio { private int st ... -
xml的基本学习
2014-03-04 15:17 8771、 XML的概念 允许开发 ... -
软件生命三大测试的概念和区别
2014-02-17 22:01 0根据不同的测试阶段,测试可以分为单元测试、集成测试、系统测试和 ... -
Session处理同账号管理
2013-10-22 17:19 772首先使用HttpSessionAttributeListene ... -
线程概念
2013-03-20 21:06 0线程对可共享的、可改变的状态变量进行访问,需要实现协同,否则数 ... -
KMP算法
2013-03-20 14:10 919package zl.character.compare; ... -
parseInt惹的祸
2013-03-04 17:57 812今天项目在实施的过程中,出现了让我懊恼的事情: 卡的金额读不出 ... -
Unable to retrieve metadata for procedure
2013-03-01 13:51 3911第一次用jdbc调用mysql存储过程的过程中犯了一个严重的错 ... -
JDK动态代理和CGLIB动态代理的学习
2012-10-08 17:25 0JDK动态代理是基于java.lang.reflect.Pro ... -
log4j输出spring框架的信息
2012-10-08 17:00 0log4j.logger.org.springframewor ... -
ReadWriteLock多线程下操作
2012-09-06 17:45 999ReadWriteLock是实现多线程环境下同步的一种方式。与 ... -
WIN7 BCompare 启动应用程序发生错误
2012-08-24 11:26 1121WIN7下寻找: 把C:\用户\[用户名]\AppData\S ... -
ant
2012-08-24 11:15 0当使用-jar执行可执行Jar包时,JVM将Jar包所在目录设 ... -
spring框架后处理器的学习
2012-07-27 09:22 730spring框架对容器管理bean和容器本身提供了额外增强功能 ... -
socket简单通讯
2012-07-26 17:09 801package zl.socket.server; impo ... -
java命令执行class文件
2012-07-26 14:30 705eclipse编译出来的class文件如果带有包结构,请在命令 ...
相关推荐
主要介绍了C语言基于回溯算法解决八皇后问题的方法,简单描述了八皇后问题,并结合实例形式分析了C语言使用回溯算法解决八皇后问题的相关操作技巧,需要的朋友可以参考下
回溯算法(八皇后问题) 绝对可以运行 c语言
八皇后问题是一个古老而著名的问题,是回溯算法的典型例题。该问题是十九世纪著名的数学家高斯1850年提出:在8X8格的国际象棋上摆放八个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行、同一列或同一斜线...
利用回溯算法设八皇后问题,掌握回溯法的基本思想和算法设计的基本步骤。注意回溯算法解决此问题要找出问题所有的可行解。
利用回溯算法解决八皇后的所有摆法,vb6源码可提供vb6学习参考,自己编写开源!
c# wpf 编写的图形界面的经典算法之回溯算法八皇后问题解决。 开发环境:vs2010 压缩工具:快压,需使用快压解压。
回溯算法是一种用于求解问题的搜索技术,适用于解决多解或无解的问题,如八皇后问题。它的工作原理类似于在决策树中进行深度优先搜索。在尝试放置皇后的过程中,如果发现当前位置无法放置,会回溯到前一步,尝试其他...
在计算机科学中,回溯算法常用于解决约束满足问题,如数独、八皇后问题等。 5皇后问题是一个经典的回溯算法实例,它要求在8x8的棋盘上放置5个皇后,使得任意两个皇后都不能在同一行、同一列或同一条对角线上。这是...
小弟申请ID不久,资源分用的很快,自己写点程序借此赚分以备使用。初出茅庐,学识尚浅。请各路朋友多多指点,不胜感激。
经典的算法,八皇后问题,c++实现,回溯法
在N皇后问题中,回溯算法扮演了核心角色。 N皇后问题是一个经典的计算机科学问题,要求在N×N的棋盘上放置N个皇后,使得任意两个皇后都无法互相攻击,即任意两个皇后不在同一行、同一列或同一斜线上。这个问题有...
通过回溯算法实现八皇后所有情况,并显示出所有情况的皇后排列位置
回溯算法--解决 八皇后 四色图 背包 自己改写的程序 回溯算法--解决 八皇后 四色图 背包 自己改写的程序
八皇后问题则是经典的回溯算法应用例子,目标是在8x8的棋盘上放置8个皇后,使得任意两个皇后都不在同一行、同一列或同一斜线上。这个问题可以通过维护一个表示皇后位置的数组来解决,每行对应一个数组元素,值表示...
用c++通过回溯算法编的八皇后计算方法,用Cpp文件格式保存的。
总结起来,这个项目展示了如何利用JavaScript实现经典的八皇后问题,借助回溯算法寻找所有可能的解,并通过VML在IE浏览器中以图形化的方式展示这些解。尽管它的浏览器兼容性有限,但这个项目提供了一个理解回溯算法...
八皇后问题(英文:Eight queens),是由国际西洋棋棋手马克斯·贝瑟尔于1848年提出的问题,是回溯算法的典型案例。问题表述为:在8×8格的国际象棋上摆放8个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一...
用回溯法解决八皇后问题,包含算法+代码+论文,最新的论文,标准模式的论文
这种“走不通就回头”的策略使得回溯算法适用于解决很多组合优化问题,如找零钱问题和八皇后问题。 在找零钱问题中,假设我们有一些面额的硬币,目标是用最少数量的硬币凑出一个给定的金额。回溯算法会尝试所有可能...