八皇后问题java实现
八皇后问题java实现
public class eightqueen {
public static int count=0;
public static void main(String[] args) {
int chess[][]=new int [8][8];
search(chess,0,8);
}
static void search(int chess[][],int row ,int n){
int chess2[][]=new int [8][8];//注意必需要复制到另外一个数组
for (int i=0;i<n;i++){
for (int j=0;j<n;j++){
chess2[i][j]=chess[i][j];
}
}
if(row==8){
System.out.println("第"+(count+1)+"种解法");
count++;
}else{
for(int j=0;j<n;j++){
if(notDanger(chess,row,j)){ //注意这里推断的是chess数组而不是chess2数组
for(int i=0;i<n;i++){
if(chess2[row][i]!=0){
System.out.println("row为"+row);
System.out.println("j为"+j);
System.out.println("第"+(count+1)+"种解法");
for (int t1=0;t1<n;t1++){
for (int t2=0;t2<n;t2++){
System.out.print(chess2[t1][t2]+" ");
}
System.out.println();
}
}
chess2[row][i]=0; //这里必须把该行的值都清零。由于在一行中可能存在有多个位置都满足条件,for循环会将每一个安全的位置都置为1.
}
chess2[row][j]=1;
search(chess2,row+1,n);
}
}
}
}
private static boolean notDanger(int[][] chess2, int row, int j) {
boolean flag1=false,flag2=false,flag3=false,flag4=false,flag5=false;
for(int i=0;i < 8;i++){ //注意这里推断的是列安全,不需要推断行安不安全。
if(chess2[i][j]!=0){
flag1=true;
break;
}
}
for(int i=row, k=j;i>=0&&k>=0;i--,k--){
if(chess2[i][k]!=0){
flag2=true;
break;
}
}
for(int i=row, k=j;i<8&&k<8;i++,k++){
if(chess2[i][k]!=0){
flag3=true;
break;
}
}
for(int i=row, k=j;i>=0&&k<8;i--,k++){
if(chess2[i][k]!=0){
flag4=true;
break;
}
}
for(int i=row, k=j;i<8&&k>=0;i++,k--){
if(chess2[i][k]!=0){
flag5=true;
break;
}
}
if(flag1||flag2||flag3||flag4||flag5){
return false;
}else{
return true;
}
}
}
八皇后问题java实现的更多相关文章
- 八皇后问题求解java(回溯算法)
八皇后问题 八皇后问题,是一个古老而著名的问题,是回溯算法的典型案例.该问题是国际西洋棋棋手马克斯·贝瑟尔于1848年提出:在8×8格的国际象棋上摆放八个皇后,使其不能互相攻击,即任意两个皇后都不能处 ...
- 使用java语言实现八皇后问题
八皇后问题,在一个8X8的棋盘中,放置八个棋子,每个棋子的上下左右,左上左下,右上右下方向上不得有其他棋子.正确答案为92中,接下来用java语言实现. 解: package eightQuen; / ...
- Java编程思想—八皇后问题(数组法、堆栈法)
Java编程思想-八皇后问题(数组法.堆栈法) 实验题目:回溯法实验(八皇后问题) 实验目的: 实验要求: 实验内容: (1)问题描述 (2)实验步骤: 数组法: 堆栈法: 算法伪代码: 实验结果: ...
- 算法学习 八皇后问题的递归实现 java版 回溯思想
1.问题描述 八皇后问题是一个以国际象棋为背景的问题:如何能够在 8×8 的国际象棋棋盘上放置八个皇后,使得任何一个皇后都无法直接吃掉其他的皇后?为了达到此目的,任两个皇后都不能处于同一条横行.纵行或 ...
- Java实现蓝桥杯 算法提高 八皇后 改
**算法提高 8皇后·改** 时间限制:1.0s 内存限制:256.0MB 提交此题 问题描述 规则同8皇后问题,但是棋盘上每格都有一个数字,要求八皇后所在格子数字之和最大. 输入格式 一个8*8的棋 ...
- java实现八皇后问题(递归和循环两种方式)
循环方式: package EightQueens; public class EightQueensNotRecursive { private static final boolean AVA ...
- 比赛组队问题 --- 递归解法 --- java代码 --- 八皇后问题
两队比赛,甲队为A.B.C3人,乙队为X.Y.Z3人.已知A不和X比,C不和X.Z比,请编程序找出3队赛手名单 采用了与八皇后问题相似的解法,代码如下: 如有疑问请链接八皇后问题的解法:http:// ...
- 八皇后问题 --- 递归解法 --- java代码
八皇后问题是一个以国际象棋为背景的问题:如何能够在 8×8 的国际象棋棋盘上放置八个皇后,使得任何一个皇后都无法直接吃掉其他的皇后?为了达到此目的,任两个皇后都不能处于同一条横行.纵行或斜线上.八皇后 ...
- java递归求八皇后问题解法
八皇后问题 八皇后问题,是一个古老而著名的问题,是回溯算法的典型案例.该问题是国际西洋棋棋手马克斯·贝瑟尔于1848年提出:在8×8格的国际象棋上摆放八个皇后,使其不能互相攻击,即任意两个皇后都不能处 ...
随机推荐
- Linux - 如何关闭防火墙
关闭防火墙,就可以外部访问了.不受端口限制.生产环境,最好开启防火墙,开启部分端口. 1.永久有效 开启: chkconfig iptables on 关闭: chkconfig iptables o ...
- Scrapy中的核心工作流程以及POST请求
五大核心组件工作流程 post请求发送 递归爬取 五大核心组件工作流程 引擎(Scrapy)用来处理整个系统的数据流处理, 触发事务(框架核心) 调度器(Scheduler)用来接受引擎发过来的请求, ...
- POJ 2337 欧拉回路
题意: 如果给出的单词能够首尾相接,请按字典序输出单词,中间要加'.' 否则输出三个"*". 思路: 欧拉回路 记得按字典序排序哦~ 加边的时候要倒着加.(邻接表遍历的时候是反着的 ...
- Tomcat web deploy
环境: apache-tomcat-7.0.73 java version "1.8.0_112" 创建普通用户,使用 sudu进行操作 JDK 配置 下载地址:http://ww ...
- Hashlib 用户名密码加密 2.0
#!/usr/bin/env python# -*- coding: utf-8 -*-# @Time : 2018/7/10 0008 11:44# @Author : Anthony.Waa# @ ...
- Android Toolbar使用及Fragment中的Toolbar处理
Toolbar作为ActionBar使用介绍 本文介绍了在Android中将Toolbar作为ActionBar使用的方法.并且介绍了在Fragment和嵌套Fragment中使用Toolbar作为A ...
- Spring aop(实验写法)
1. 创建通知:定义一个接口 Public interface Sleepable { voidsleep(); }然后写一个Human类,他实现了这个接口 publicHuman implement ...
- VS2015 & ReSharper CTRL
如下为个人比较常用的快捷键,部分快捷键有进行修改. 一.VS偏好设置: 1.转到定义:F12 2.查找所有引用:Shift + F12 3.跳转到指定的某一行:Ctrl + G (or 单击状态栏中的 ...
- 8 Python+Selenium操作测试对象
[环境信息] Python3.6+selenium3.0.2+Firefox50.0+win7 [操作方法] 1.清除输入框内容:clear() 2.单击一个按钮:click() 3.返回元素尺寸:s ...
- Shiro从数据表中初始化资源和权限
之前在测试的Web工程下,我们在applicationContext.xml中配置了shiroFilter资源拦截器信息: <bean id="shiroFilter" cl ...