八皇后算法—java
上次發了個pyhton語言的八皇后算法,這次試試java語言的
直接上代碼,裏面有注釋以便理解閲讀
首先是主函數代碼:
package eighthqueen;import java.util.*;
import eighthqueen.queenjudgmen;
public class eigqueen {public static void main(String[] args) {// TODO Auto-generated method stubint data [][] = new int [8][8];//定义一个全0的二维数组,存放皇后位置boolean opinion [][] = new boolean [8][8];//定义一个全false的二维数组,判断可存放皇后位置//定义的opinion默认值全为false,需先将false改为true以便理解使用for(int i =0;i<opinion.length;i++) {for(int j=0;j<opinion[0].length;j++) {opinion[i][j] = true;}}//定义一个int型数据计算可行次数int num = 0;//对第一个皇后先判断可存放的位置,用opinion数组判断,true为可存放位置,保存在firstlist中char firstlist []= queenjudgmen.findlist(opinion);//进行第一个皇后的循环存放for(int firstindex = 0;firstindex <firstlist.length/2;firstindex++) {//firstlist。length/2 这个是因为每次都取firstlist中的俩个数据比如:长度为4,则循环小于4/2次就可以取完int firstone = firstlist[firstindex*2]-48;//获取行, (-48)是因为获取的数据是ascll中 1 对应 49的值以此类推int firsttwo = firstlist[firstindex*2+1]-48;// 获取列//发现对于一般的变量复制,new改变,old也会改变//由此设置个函数将old变量一一赋值给new,这样new改变,old不会改变int firstdata[][] = queenjudgmen.copydata(data);boolean firstopinion[][] = queenjudgmen.copyopinion(opinion);//令所选皇后位置由0 变为 1firstdata[firstone][firsttwo] = 1;//令所选皇后位置的行,列,左斜线 \ ,右斜线 / 由true变为falsefirstopinion= queenjudgmen.algjudegment(firstopinion,firstone,firsttwo);//改变复制的old数据中皇后所选过的位置true变为false,以免造成后续重复循环相同的答案//若不加此句则每个答案会多出7*6*5*4*3*2*1=5040个opinion[firstone][firsttwo] = false;//开始第二个皇后位置存放及判断,同第一个皇后道理一样char secondlist [] = queenjudgmen.findlist(firstopinion);if(secondlist.length == 0) {continue;}else {for(int secondindex=0;secondindex < secondlist.length/2;secondindex++) {int secondone = secondlist[secondindex*2]-48;int secondtwo = secondlist[secondindex*2+1]-48;int seconddata[][] = queenjudgmen.copydata(firstdata);boolean secondopinion[][] = queenjudgmen.copyopinion(firstopinion);seconddata[secondone][secondtwo] = 1;secondopinion = queenjudgmen.algjudegment(secondopinion, secondone, secondtwo);firstopinion[secondone][secondtwo] = false;//第三个皇后char thirdlist [] =queenjudgmen.findlist(secondopinion);if(thirdlist.length == 0) {continue;}else {for(int thirdindex=0;thirdindex < thirdlist.length/2;thirdindex++) {int thirdone = thirdlist[thirdindex*2]-48;int thirdtwo = thirdlist[thirdindex*2+1]-48;int thirddata[][] = queenjudgmen.copydata(seconddata);boolean thirdopinion[][] = queenjudgmen.copyopinion(secondopinion);thirddata[thirdone][thirdtwo] = 1;thirdopinion = queenjudgmen.algjudegment(thirdopinion, thirdone, thirdtwo);secondopinion[thirdone][thirdtwo] = false;//第四个皇后char fourlist [] =queenjudgmen.findlist(thirdopinion);if(fourlist.length == 0) {continue;}else {for(int fourindex=0;fourindex < fourlist.length/2;fourindex++) {int fourone = fourlist[fourindex*2]-48;int fourtwo = fourlist[fourindex*2+1]-48;int fourdata[][] = queenjudgmen.copydata(thirddata);boolean fouropinion[][] = queenjudgmen.copyopinion(thirdopinion);fourdata[fourone][fourtwo] = 1;fouropinion = queenjudgmen.algjudegment(fouropinion, fourone, fourtwo);thirdopinion[fourone][fourtwo] = false;//第五个皇后char fifthlist [] = queenjudgmen.findlist(fouropinion);if(fifthlist.length == 0) {continue;}else {for(int fifthindex=0;fifthindex < fifthlist.length/2;fifthindex++) {int fifthone = fifthlist[fifthindex*2]-48;int fifthtwo = fifthlist[fifthindex*2+1]-48;int fifthdata [][] = queenjudgmen.copydata(fourdata);boolean fifthopinion [][] = queenjudgmen.copyopinion(fouropinion);fifthdata[fifthone][fifthtwo] = 1;fifthopinion = queenjudgmen.algjudegment(fifthopinion, fifthone, fifthtwo);fouropinion[fifthone][fifthtwo] = false;//第六个皇后char sixthlist [] = queenjudgmen.findlist(fifthopinion);if(sixthlist.length == 0) {continue;}else {for(int sixthindex=0;sixthindex < sixthlist.length/2;sixthindex++) {int sixthone = sixthlist[sixthindex*2]-48;int sixthtwo = sixthlist[sixthindex*2+1]-48;int sixthdata[][] = queenjudgmen.copydata(fifthdata);boolean sixthopinion[][] = queenjudgmen.copyopinion(fifthopinion);sixthdata[sixthone][sixthtwo] = 1;sixthopinion = queenjudgmen.algjudegment(sixthopinion, sixthone, sixthtwo);fifthopinion[sixthone][sixthtwo] = false;//第七个皇后char seventhlist [] = queenjudgmen.findlist(sixthopinion);if(seventhlist.length == 0) {continue;}else {for(int seventhindex=0;seventhindex < seventhlist.length/2;seventhindex++) {int seventhone = seventhlist[seventhindex*2]-48;int seventhtwo = seventhlist[seventhindex*2+1]-48;int seventhdata[][] = queenjudgmen.copydata(sixthdata);boolean seventhopinion[][] = queenjudgmen.copyopinion(sixthopinion);seventhdata[seventhone][seventhtwo] = 1;seventhopinion = queenjudgmen.algjudegment(seventhopinion, seventhone, seventhtwo);sixthopinion[seventhone][seventhtwo] = false;//第八个皇后char eighthlist[] = queenjudgmen.findlist(seventhopinion);if(eighthlist.length == 0) {continue;}else {for(int eighthindex=0;eighthindex < eighthlist.length/2;eighthindex++) {int eighthone = eighthlist[eighthindex*2]-48;int eighthtwo = eighthlist[eighthindex*2+1]-48;int eighthdata[][] = queenjudgmen.copydata(seventhdata);boolean eighthopinion[][] = queenjudgmen.copyopinion(seventhopinion);eighthdata[eighthone][eighthtwo] = 1;eighthopinion = queenjudgmen.algjudegment(eighthopinion, eighthone, eighthtwo);seventhopinion[eighthone][eighthtwo] = false;num++;}}}}}}} }}}}}}}}System.out.println(num);}}
接著是 算法函數代碼
package eighthqueen;public class queenjudgmen {//int 型的二维数组打印static void intarrayprint(int data[][]) {for(int i =0;i<data.length;i++) {for(int j=0;j<data[0].length;j++) {System.out.printf("%2d",data[i][j]);}System.out.println();}}//boolean 型的二维数组打印static void booleanarrayprint(boolean opinion[][]){for(int i =0;i<opinion.length;i++) {for(int j=0;j<opinion[0].length;j++) {System.out.printf("%6s",opinion[i][j]);}System.out.println();}}//查找opinion数据中的true值static char[] findlist(boolean opinion[][]) {StringBuffer interim = new StringBuffer();for(int i = 0;i < opinion.length;i++) {for(int j = 0;j < opinion[0].length;j++) {if(opinion[i][j] == true) {interim.append(i);interim.append(j);}}}String resultlist = interim.toString();char resultchar [] = resultlist.toCharArray();return resultchar;}//实现对每次皇后的data的复制static int[][]copydata(int data[][]) {int changedata[][] = new int [data.length][data[0].length];for(int i =0;i<data.length;i++) {for(int j=0;j<data[0].length;j++) {changedata[i][j] = data[i][j];}}return changedata;}//实现对每次皇后的opinion的复制static boolean[][] copyopinion(boolean opinion[][]) {boolean changeopinion[][] = new boolean [opinion.length][opinion[0].length];for(int i =0;i<opinion.length;i++) {for(int j=0;j<opinion[0].length;j++) {changeopinion[i][j] = opinion[i][j];}}return changeopinion ;}//对皇后行,列,左斜线 \ ,右斜线 / 的条件限定static boolean[][] algjudegment(boolean opinion[][],int row,int train){int newrow = row;int newtrain = train;opinion[newrow][newtrain] = false;//行while(newtrain!=0) {newtrain-=1;opinion[newrow][newtrain] = false;}newtrain=train;while(newtrain!=7) {newtrain+=1;opinion[newrow][newtrain] = false;}newtrain=train;//列while(newrow!=0) {newrow-=1;opinion[newrow][newtrain] = false;}newrow = row;while(newrow!=7) {newrow+=1;opinion[newrow][newtrain] =false;}//左斜线 \newrow = row;//任意行或列減一为零while(newrow!=0 && newtrain!=0) {newrow-=1;newtrain-=1;opinion[newrow][newtrain] = false;}newrow = row;newtrain = train;//任意行或列加一为七while(newrow!=7 && newtrain!=7) {newrow+=1;newtrain+=1;opinion[newrow][newtrain] = false;}//右斜线 /newrow = row;newtrain = train;//行加列减,最大为七,最小为零while(newrow!=7 && newtrain!=0) {newrow+=1;newtrain-=1;opinion[newrow][newtrain] = false;}newrow = row;newtrain = train;//行减列加,最小为零,最大为七while(newrow!=0 && newtrain!=7) {newrow-=1;newtrain+=1;opinion[newrow][newtrain] = false;}return opinion;}
}
结果92种
八皇后算法—java相关推荐
- 八皇后问题java_八皇后问题java实现
八皇后问题java实现public class eightqueen { public static int count=0; public static void main(String[] arg ...
- 八皇后java_八皇后(JAVA算法实现)
在学习现代软件工程构建之法这门课时,老师要求发表一篇博客,使用JAVA算法实现八皇后问题的求解.写这篇博客时,我学习了一些其他的博客,自己无法解决时,向他人学习也是一种方法. 国际西洋棋棋手马克斯·贝 ...
- Java基础记忆12(八皇后算法和五子棋玩法)
首先,在国际象棋中.八皇后是8*8棋盘,其中皇后可以直线行走,可以斜线行走,不分上下左右格数的. 附可行摆法: 所以,可归纳问题的条件为,8皇后之间需满足: 1.不在同一行上 ...
- 用递归思想和回溯算法解决八皇后问题(java实现)
八皇后问题 八皇后问题,是一个古老而著名的问题,是回溯算法的典型案例.该问题是国际西洋棋棋手马克斯·贝瑟尔于1848年提出:在8×8格的国际象棋上摆放八个皇后,使其不能互相攻击,即任意两个皇后都不能处 ...
- java编写八皇后算法
/*** 八皇后* @Author:yangle* @Date:2020/9/23* @version:1.0*/ public class test {public static int num = ...
- 八皇后问题(Java代码实现)
什么是八皇后问题 八皇后问题,是一个古老而著名的问题,是回溯算法的典型案例.该问题是国际西洋棋棋手马克斯·贝瑟尔于1848年提出:在8×8格的国际象棋上摆放八个皇后,使其不能互相攻击,即:任意两个皇后 ...
- 八皇后算法python_Python学习二(生成器和八皇后算法)
看书看到迭代器和生成器了,一般的使用是没什么问题的,不过很多时候并不能用的很习惯 书中例举了经典的八皇后问题,作为一个程序员怎么能够放过做题的机会呢,于是乎先自己来一遍,于是有了下面这个ugly的代码 ...
- 前端开发:JS中关于八皇后算法的使用
前言 在前端开发过程中,关于算法的使用也是非常常见的操作,尤其是处理一些复杂的业务场景,还有就是前端获取到后端返回的复杂结构的数据,所以说前端开发中处处都有算法使用的场景.开发者从接触编程开发开始,就 ...
- PHP实现八皇后算法-回溯算法
回溯算法实际上一个类似枚举的搜索尝试过程,主要是在搜索尝试过程中寻找问题的解,当发现已不满足求解条件时,就"回溯"返回,尝试别的路径.回溯法是一种选优搜索法,按选优条件向前搜索,以 ...
- python中八皇后如何运算的_python解决八皇后算法
展开全部 global col #定义一些全局变量 global row global pos_diag global nag_diag global count def output(): ''' ...
最新文章
- c++ string 拼接_String类5个常见面试题的解答过程和原理
- 推荐|5种商业AI产品的技术架构设计!
- android studio初始化设置,Android studio 初始设置
- 双十一!!作为程序员的你该如何拥有个人服务器和域名呢?
- lisp提取长方形坐标_语义SLAM | 深度学习用于特征提取 : SuperPoint(一)
- 3 photolemur 样式下载_全自动照片美化软件Photolemur mac特别版
- libusb获取usb设备的idVendor(vid),idProduct(pid),以及Serial Number
- Discuz常见小问题-如何关闭验证码
- 无需代码,图文并茂详解EEGLAB中的ERPs数据分析方法
- 体脂率在线计算机,体脂率(BFR)计算器
- Android 蓝牙开发 BLE(低功耗) 摩拜单车共享汽车开门实例
- ToolBar修改返回按钮图标
- AutoSAR系列讲解(深入篇)13.1-闪烁一颗LED灯 1
- c语言零基础入门(经验总结)
- Boring Old Menu Bar for Mac(菜单栏美化工具)
- “x = a if b else c“是啥意思?【赋值表达式】【if语句】
- 计算机计算exp函数原理,exp函数表示什么意思(exp怎么按计算器)
- 计算机网络与嵌入式系统,嵌入式系统与计算机系统有什么不同
- 【速览】2021年全球及中国培育钻石行业发展现状及未来发展趋势分析[图]
- 利用动态二进制加密实现新型一句话木马之.NET篇(转)冰蝎
热门文章
- ORB-SLAM2代码阅读笔记(十):sim3求解
- obs听到了自己的回音_直播连麦过程中回声回音解决方式
- python安装失败0x80070005_win10下载安装软件时提示“0x80070005-拒绝访问”
- 寒霜朋克计算机丢失,寒霜朋克无法进入游戏解决方法 寒霜朋克无法进入游戏怎么办...
- 小牛电动车能跑多快、多远?一起来了解一下
- Linux进程管理软件supervisord使用心得
- PLSQL Developer解决科学计数法
- Mac 全局安装 webpack 报错权限不足解决方法
- Android 蓝牙 BLE扫描、广播、连接、数据收发源码分析(2)- inquiry扫描周围设备
- interactive governor study for android