import java.util.Date;

public class EightQueen

{
 public static void main(String[] args)

{
  long start = new Date().getTime();
  System.out.println("起始时间:[" + start + "]");  
  
  EightQueen Q = new EightQueen();
  Q.putQueen(0);
  
  long end = new Date().getTime();
  System.out.println("截止时间:[" + end + "]");
  System.out.println("共耗时:[" + (end - start) + "]毫秒");

}

static final int QUEEN_MAX = 8; // 皇后的数量

int[][] Queencount = new int[QUEEN_MAX][QUEEN_MAX];// 分配8X8的数组,充当棋盘,存放皇后

int resultCount = 0;// 记录皇后的放置方法的总数

int[] Queenplace = new int[QUEEN_MAX];// 存放每行的皇后位置即第column行的皇后放置位置是Queenplace[column]

public void putQueen(int Rows)

{

int row = Rows;// 行标

for (int column = 0; column < QUEEN_MAX; column++)// column表示列标

{

if (Queencount[row][column] == 0)// row行、column列可以放皇后

{

for (int rowi = row + 1; rowi < QUEEN_MAX; rowi++)// for循环的作用是使其斜下方和正下方不为0

{

Queencount[rowi][column]++;//正下方不为零

if (column - rowi + row >= 0)//左斜下方不为零

{

Queencount[rowi][column - rowi + row]++;

}

if (column + rowi - row < QUEEN_MAX)//右斜下方不为零

{

Queencount[rowi][column + rowi - row]++;

}

} //

Queenplace[row] = column;// row行column列放了皇后
    
    if (row == QUEEN_MAX - 1)// 皇后已放满,打印出皇后布局

{

printQueen(++resultCount);
    }

else // 否则继续排列下一行皇后

{

putQueen(row + 1);//递归调用

}

for (int rows = row + 1; rows < QUEEN_MAX; rows++)// 回溯,在此行的皇后不放此列column
                 // ,恢复该位置的正下面/斜下面的count

{

Queencount[rows][column]--;

if (column - rows + row >= 0)

{

Queencount[rows][column - rows + row]--;

}

if (column + rows - row < QUEEN_MAX)

{

Queencount[rows][column + rows - row]--;

}

}

}
  }

if (row == 0)

{

System.out.println(QUEEN_MAX + "皇后问题共有" + resultCount + "个解.");

}

}

public void printQueen(int size)// 打印皇后布局

{

System.out.println(QUEEN_MAX + "皇后的第" + size + "个解是:");

System.out.println();

for (int row = 0; row < QUEEN_MAX; row++)

{

for (int column = 0; column < QUEEN_MAX; column++)

{

System.out.print(Queenplace[row] == column ? " * " : " - ");

}

System.out.println();

}

System.out.println();

}

}

八皇后java算法的更多相关文章

  1. 八皇后—Java

    package queen; public class queen { static boolean col[] = new boolean[8]; static boolean main_diago ...

  2. Java实现蓝桥杯 算法提高 八皇后 改

    **算法提高 8皇后·改** 时间限制:1.0s 内存限制:256.0MB 提交此题 问题描述 规则同8皇后问题,但是棋盘上每格都有一个数字,要求八皇后所在格子数字之和最大. 输入格式 一个8*8的棋 ...

  3. 算法学习 八皇后问题的递归实现 java版 回溯思想

    1.问题描述 八皇后问题是一个以国际象棋为背景的问题:如何能够在 8×8 的国际象棋棋盘上放置八个皇后,使得任何一个皇后都无法直接吃掉其他的皇后?为了达到此目的,任两个皇后都不能处于同一条横行.纵行或 ...

  4. 八皇后问题求解java(回溯算法)

    八皇后问题 八皇后问题,是一个古老而著名的问题,是回溯算法的典型案例.该问题是国际西洋棋棋手马克斯·贝瑟尔于1848年提出:在8×8格的国际象棋上摆放八个皇后,使其不能互相攻击,即任意两个皇后都不能处 ...

  5. 7, java数据结构和算法: 八皇后问题分析和实现 , 递归回溯

    什么是八皇后问题: 指的是,在一个8 * 8的棋盘中, 放置8个棋子, 保证这8个棋子相互之间, 不在同一行,同一列,同一斜线, 共有多少种摆法? 游戏连接: http://www.4399.com/ ...

  6. 算法——八皇后问题(eight queen puzzle)之回溯法求解

    八皇后谜题是经典的一个问题,其解法一共有种! 其定义: 首先定义一个8*8的棋盘 我们有八个皇后在手里,目的是把八个都放在棋盘中 位于皇后的水平和垂直方向的棋格不能有其他皇后 位于皇后的斜对角线上的棋 ...

  7. Java编程思想—八皇后问题(数组法、堆栈法)

    Java编程思想-八皇后问题(数组法.堆栈法) 实验题目:回溯法实验(八皇后问题) 实验目的: 实验要求: 实验内容: (1)问题描述 (2)实验步骤: 数组法: 堆栈法: 算法伪代码: 实验结果: ...

  8. 栈(stack)、递归(八皇后问题)、排序算法分类,时间和空间复杂度简介

    一.栈的介绍: 1)栈的英文为(stack)2)栈是一个先入后出(FILO-First In Last Out)的有序列表.3)栈(stack)是限制线性表中元素的插入和删除只能在线性表的同一端进行的 ...

  9. 八皇后算法的另一种实现(c#版本)

    八皇后: 八皇后问题,是一个古老而著名的问题,是回溯算法的典型案例.该问题是国际西洋棋棋手马克斯·贝瑟尔于1848年提出:在8×8格的国际象棋上摆放八个皇后,使其不能互相攻击,即任意两个皇后都不能处于 ...

随机推荐

  1. 75篇关于Tomcat源码和机制的文章

    75篇关于Tomcat源码和机制的文章 标签: tomcat源码机制 2016-12-30 16:00 10083人阅读 评论(1) 收藏 举报  分类: tomcat内核(82)  版权声明:本文为 ...

  2. 多个div同时居中的写法

    多个div在某个div的中间,他们个数不一定但是需要在那个父级div中显示(和margin:0 auto一样的效果) <!DOCTYPE html><html lang=" ...

  3. MySQL wamp密码修改

    WAMP安装好后,mysql密码是为空的,那么要如何修改呢?其实很简单,通过几条指令就行了,下面我就一步步来操作. 首先,通过WAMP打开mysql控制台. 提示输入密码,因为现在是空,所以直接按回车 ...

  4. 剔除eclipse的configuration目录[转]

    欢迎和大家交流技术相关问题: 邮箱: jiangxinnju@163.com 博客园地址: http://www.cnblogs.com/jiangxinnju GitHub地址: https://g ...

  5. 删除Kafka的topic

    刚接触Kafka,开始认为删除一个topic只是运行一下Kafka-topic.sh的delete命令就行了,但是,事实却不是这样,会出现两种情况:(1) 如果topic没有使用过即没有传输过消息,可 ...

  6. jquery trigger 触发事件小计 -- 关于a标签

    jquery -- trigger触发执行事件方法虽然好用,偶尔也会出些小问题. 在最近得一个项目中需要触发a标签的点击事件时,我就遇到了点小问题.我很想当然的写层这样:$("a" ...

  7. MVC思想

    MVC英文即Model-View-Controller,即把一个应用的输入.处理.输出流程按照Model.View.Controller的方式进行分离,这样一个应用被分成三个层--模型层.视图层.控制 ...

  8. java selenium后报错Element not found in the cache元素定位要重新赋值之前的定义

    习惯上把定位的元素在操作之前就定位好, 例如: WebElement element1=driver.findElement(...);      ----------declaration1 Web ...

  9. codeforces #369div2 B. Chris and Magic Square

    题目:在网格某一处填入一个正整数,使得网格每行,每列以及两条主对角线的和都相等 题目链接:http://codeforces.com/contest/711/problem/B 分析:题目不难,找到要 ...

  10. 【翻译】configuration changes与handler.post

    原文地址 http://corner.squareup.com/2013/12/android-main-thread-2.html 在前一部分里面previous part ,我们深入挖掘了 loo ...