八皇后问题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格的国际象棋上摆放八个皇后,使其不能互相攻击,即任意两个皇后都不能处 ...
随机推荐
- Node.js:安装配置
ylbtech-Node.js:安装配置 1.返回顶部 1. ode.js 安装配置 本章节我们将向大家介绍在window和Linux上安装Node.js的方法. 本安装教程以Node.js v4.4 ...
- Node.js:教程
ylbtech-Node.js:教程 1.返回顶部 1. Node.js 教程 简单的说 Node.js 就是运行在服务端的 JavaScript. Node.js 是一个基于Chrome JavaS ...
- JPA设置表名和实体名,表字段与实体字段的对应
转自:https://blog.csdn.net/LQW_java_home/article/details/53079363 首先 你的jpaProperties配置项中要有 <prop ke ...
- MySQL实现表之间的字段更新
新功能写好之后,需要把以前表数据更新一下,字段数据从以前的表中获取,只更新两个字段 UPDATE TABLE1,TABLE2 SET TABLE1.COLUMN1 = TABLE2.COLUMN1 , ...
- 升鲜宝V2.0_杭州生鲜配送行业,升鲜宝供应链手机分拣系统使用说明_升鲜宝生鲜供应链管理系统_15382353715_余东升
1. 系统概述 升鲜宝供应链手机分拣系统(Android版)是升鲜宝供应链管理系统的配套分拣系统,本系统适用于农副产品生鲜配送供应链企业分拣过程,在线上数据管理和线下业务管理两大方面提供解决方案,该系 ...
- Hadoop MapReduce编程 API入门系列之wordcount版本3(七)
这篇博客,给大家,体会不一样的版本编程. 代码 package zhouls.bigdata.myMapReduce.wordcount3; import java.io.IOException; i ...
- python ansible api
#!/usr/bin/env python # -*- coding: utf-8 -*- # @File : test2.py # @Author: Anthony.waa # @Date : 20 ...
- Nginx 404 500
Nginx反向代理自定义404错误页面 http中添加 proxy_intercept_errors on; server中添加 error_page 404 = https://www.longda ...
- Unity3d Time
using UnityEngine; using System.Collections; public class test1 : MonoBehaviour { public float angle ...
- 【JavaScript从入门到放弃】JS基础-01
作为一个前端开发人员,JS是我们行走江湖吃饭的家伙.基本上一个前端人员能值多少大洋,就看JS了.虽然各种框架层出不穷,但是归根结底学好原生JS才是硬道理. 学习任何新东西其实都遵循 10000 小时成 ...