八皇后问题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实现的更多相关文章

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

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

  2. 使用java语言实现八皇后问题

    八皇后问题,在一个8X8的棋盘中,放置八个棋子,每个棋子的上下左右,左上左下,右上右下方向上不得有其他棋子.正确答案为92中,接下来用java语言实现. 解: package eightQuen; / ...

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

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

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

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

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

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

  6. java实现八皇后问题(递归和循环两种方式)

    循环方式: package EightQueens;   public class EightQueensNotRecursive { private static final boolean AVA ...

  7. 比赛组队问题 --- 递归解法 --- java代码 --- 八皇后问题

    两队比赛,甲队为A.B.C3人,乙队为X.Y.Z3人.已知A不和X比,C不和X.Z比,请编程序找出3队赛手名单 采用了与八皇后问题相似的解法,代码如下: 如有疑问请链接八皇后问题的解法:http:// ...

  8. 八皇后问题 --- 递归解法 --- java代码

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

  9. java递归求八皇后问题解法

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

随机推荐

  1. Java:笔记-1

    ylbtech-Java:笔记-1 1.返回顶部 1. /** * 简介请求 * @return */ @RequestMapping("/JJ") public String j ...

  2. [源码管理] ubuntu下SVN服务器安装配置

    一.SVN安装1.安装包$ sudo apt-get install subversion2.添加svn管理用户及subversion组$ sudo adduser svnuser$ sudo add ...

  3. 抽象类(abrstract class)与接口(interface)有何异同

    抽象类:如果一个类中包含抽象方法(用abstract修饰的方法),那么这个类就是抽象类 接口:是指一个方法的集合,接口中的所有方法都没有方法体 相同点: 1)都不能被实例化 2)接口的实现类或抽象类的 ...

  4. Lucene中Analyzer语句分析

    Lucene中Analyzer语句分析,利用lucene中自带的词法分析工具Analyzer,进行对句子的分析. 源代码如下: package com.test; import java.io.IOE ...

  5. ios UISegmentedControl的使用简介

    初始化UISegmentedControl NSArray *arr = [[NSArray alloc]initWithObjects:@"轻拍",@"长按" ...

  6. RDS中的.frm和.ibd文件转换为sql文件

    --- 转自他人 mysql存储在磁盘中,各种天灾人祸都会导致数据丢失.大公司的时候我们常常需要做好数据冷热备,对于小公司来说要做好所有数据备份需要支出大量的成本,很多公司也是不现实的.万一还没有做好 ...

  7. Fabric quickly

    环境很重要.环境很重要.环境很重要 # CentOS 7 $ setenforce 0 # 可以设置配置文件永久关闭 $ systemctl stop iptables.service $ syste ...

  8. Android学习——碎片Fragment的使用

    一.碎片的简单用法(实现在一个活动中添加两个碎片,并让这两个碎片平分活动空间) 1.新建一个FragmentTest项目: 新建一个左侧碎片布局left_fragment.xml,代码如下:(只放置一 ...

  9. Fragment_动态加载

    1.新建Fragment的XML布局文件. 2.在activity.xml中添加需要加载Fragment.列如: <?xml version="1.0" encoding=& ...

  10. UVa 1583 Digit Generator WA

    #include<stdio.h> int main() { long int n,i,s=0; while(scanf("%d",&n)!=EOF) { in ...