八皇后java算法
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算法的更多相关文章
- 八皇后—Java
package queen; public class queen { static boolean col[] = new boolean[8]; static boolean main_diago ...
- Java实现蓝桥杯 算法提高 八皇后 改
**算法提高 8皇后·改** 时间限制:1.0s 内存限制:256.0MB 提交此题 问题描述 规则同8皇后问题,但是棋盘上每格都有一个数字,要求八皇后所在格子数字之和最大. 输入格式 一个8*8的棋 ...
- 算法学习 八皇后问题的递归实现 java版 回溯思想
1.问题描述 八皇后问题是一个以国际象棋为背景的问题:如何能够在 8×8 的国际象棋棋盘上放置八个皇后,使得任何一个皇后都无法直接吃掉其他的皇后?为了达到此目的,任两个皇后都不能处于同一条横行.纵行或 ...
- 八皇后问题求解java(回溯算法)
八皇后问题 八皇后问题,是一个古老而著名的问题,是回溯算法的典型案例.该问题是国际西洋棋棋手马克斯·贝瑟尔于1848年提出:在8×8格的国际象棋上摆放八个皇后,使其不能互相攻击,即任意两个皇后都不能处 ...
- 7, java数据结构和算法: 八皇后问题分析和实现 , 递归回溯
什么是八皇后问题: 指的是,在一个8 * 8的棋盘中, 放置8个棋子, 保证这8个棋子相互之间, 不在同一行,同一列,同一斜线, 共有多少种摆法? 游戏连接: http://www.4399.com/ ...
- 算法——八皇后问题(eight queen puzzle)之回溯法求解
八皇后谜题是经典的一个问题,其解法一共有种! 其定义: 首先定义一个8*8的棋盘 我们有八个皇后在手里,目的是把八个都放在棋盘中 位于皇后的水平和垂直方向的棋格不能有其他皇后 位于皇后的斜对角线上的棋 ...
- Java编程思想—八皇后问题(数组法、堆栈法)
Java编程思想-八皇后问题(数组法.堆栈法) 实验题目:回溯法实验(八皇后问题) 实验目的: 实验要求: 实验内容: (1)问题描述 (2)实验步骤: 数组法: 堆栈法: 算法伪代码: 实验结果: ...
- 栈(stack)、递归(八皇后问题)、排序算法分类,时间和空间复杂度简介
一.栈的介绍: 1)栈的英文为(stack)2)栈是一个先入后出(FILO-First In Last Out)的有序列表.3)栈(stack)是限制线性表中元素的插入和删除只能在线性表的同一端进行的 ...
- 八皇后算法的另一种实现(c#版本)
八皇后: 八皇后问题,是一个古老而著名的问题,是回溯算法的典型案例.该问题是国际西洋棋棋手马克斯·贝瑟尔于1848年提出:在8×8格的国际象棋上摆放八个皇后,使其不能互相攻击,即任意两个皇后都不能处于 ...
随机推荐
- 從 Internet 安裝 Cygwin
從 Internet 安裝 Cygwin 如果您有高速的 Internet 連線, 可以考慮用這個方法, 否則不建議使用 執行 setup.exe Cygwin Setup 畫面, 按 Next. C ...
- RabbitMQ之入门
生成者: #coding:utf-8 import sys import pika credentials=pika.PlainCredentials("guest"," ...
- openssl evp 对称加密(AES_ecb,ccb)
openssl evp 对称加密(AES_ecb,ccb) evp.h 封装了openssl常用密码学工具,以下主要说对称加密的接口 1. 如下使用 aes_256_ecb 模式的加密解密测试代码 u ...
- 个人评测——K米
K米APP案例分析 关于 K米 -- 的案例分析 产品 K米的APP (全国KTV点歌,手机直播,互动,交友,预订)的Android客户端 第一部分 调研,评测 评测: 软件的bug,功能评测,黑箱测 ...
- 分布式事务二阶提交DTS系统
前端时间写新交易系统时,经常碰到事务一致性问题,网上搜了一下,有一些解决方法,采用了扫表补偿的方式来完成,刚开始只有几个接口需要处理,工作量还可以,但是后续随着需求的增加,这些场景错综复杂,导致大量时 ...
- 我的Time
C++改本地时间 #include<iostream> #include<windows.h> using namespace std; void main() { //tim ...
- svg转化成canvas以便生成base64位的图片
很久前写了关于把html转成图片的一个例子,最近有出了新的问题.利用html2canvas.js文件把html转成base64位的图片是没什么问题的,但也不是绝对的,比如这时候不能碰见svg这个鬼,h ...
- 网页边框样式与style样式部分总结
1).border边框样式:border-style:solid 边框样式值如下: none : 无边框.与任何指定的border-width值无关 hidden : 隐藏边框.IE不支持 dotte ...
- poj1753 Flip Game
题意:4*4的正方形,每个格子有黑白两面,翻转格子使得4*4个格子显示全黑或全白,翻转要求:选中的那个格子,以及其上下左右相邻的格子(如果存在)要同时翻转.输出最小的达到要求的翻转次数或者Imposs ...
- [转]IE8兼容Object.keys
转自:http://blog.sina.com.cn/s/blog_6d63cf160102vbsg.html 只需要加入 var DONT_ENUM = "propertyIsEnumer ...