上次發了個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相关推荐

  1. 八皇后问题java_八皇后问题java实现

    八皇后问题java实现public class eightqueen { public static int count=0; public static void main(String[] arg ...

  2. 八皇后java_八皇后(JAVA算法实现)

    在学习现代软件工程构建之法这门课时,老师要求发表一篇博客,使用JAVA算法实现八皇后问题的求解.写这篇博客时,我学习了一些其他的博客,自己无法解决时,向他人学习也是一种方法. 国际西洋棋棋手马克斯·贝 ...

  3. Java基础记忆12(八皇后算法和五子棋玩法)

    首先,在国际象棋中.八皇后是8*8棋盘,其中皇后可以直线行走,可以斜线行走,不分上下左右格数的. 附可行摆法: 所以,可归纳问题的条件为,8皇后之间需满足: 1.不在同一行上              ...

  4. 用递归思想和回溯算法解决八皇后问题(java实现)

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

  5. java编写八皇后算法

    /*** 八皇后* @Author:yangle* @Date:2020/9/23* @version:1.0*/ public class test {public static int num = ...

  6. 八皇后问题(Java代码实现)

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

  7. 八皇后算法python_Python学习二(生成器和八皇后算法)

    看书看到迭代器和生成器了,一般的使用是没什么问题的,不过很多时候并不能用的很习惯 书中例举了经典的八皇后问题,作为一个程序员怎么能够放过做题的机会呢,于是乎先自己来一遍,于是有了下面这个ugly的代码 ...

  8. 前端开发:JS中关于八皇后算法的使用

    前言 在前端开发过程中,关于算法的使用也是非常常见的操作,尤其是处理一些复杂的业务场景,还有就是前端获取到后端返回的复杂结构的数据,所以说前端开发中处处都有算法使用的场景.开发者从接触编程开发开始,就 ...

  9. PHP实现八皇后算法-回溯算法

    回溯算法实际上一个类似枚举的搜索尝试过程,主要是在搜索尝试过程中寻找问题的解,当发现已不满足求解条件时,就"回溯"返回,尝试别的路径.回溯法是一种选优搜索法,按选优条件向前搜索,以 ...

  10. python中八皇后如何运算的_python解决八皇后算法

    展开全部 global col #定义一些全局变量 global row global pos_diag global nag_diag global count def output(): ''' ...

最新文章

  1. c++ string 拼接_String类5个常见面试题的解答过程和原理
  2. 推荐|5种商业AI产品的技术架构设计!
  3. android studio初始化设置,Android studio 初始设置
  4. 双十一!!作为程序员的你该如何拥有个人服务器和域名呢?
  5. lisp提取长方形坐标_语义SLAM | 深度学习用于特征提取 : SuperPoint(一)
  6. 3 photolemur 样式下载_全自动照片美化软件Photolemur mac特别版
  7. libusb获取usb设备的idVendor(vid),idProduct(pid),以及Serial Number
  8. Discuz常见小问题-如何关闭验证码
  9. 无需代码,图文并茂详解EEGLAB中的ERPs数据分析方法
  10. 体脂率在线计算机,体脂率(BFR)计算器
  11. Android 蓝牙开发 BLE(低功耗) 摩拜单车共享汽车开门实例
  12. ToolBar修改返回按钮图标
  13. AutoSAR系列讲解(深入篇)13.1-闪烁一颗LED灯 1
  14. c语言零基础入门(经验总结)
  15. Boring Old Menu Bar for Mac(菜单栏美化工具)
  16. “x = a if b else c“是啥意思?【赋值表达式】【if语句】
  17. 计算机计算exp函数原理,exp函数表示什么意思(exp怎么按计算器)
  18. 计算机网络与嵌入式系统,嵌入式系统与计算机系统有什么不同
  19. 【速览】2021年全球及中国培育钻石行业发展现状及未来发展趋势分析[图]
  20. 利用动态二进制加密实现新型一句话木马之.NET篇(转)冰蝎

热门文章

  1. ORB-SLAM2代码阅读笔记(十):sim3求解
  2. obs听到了自己的回音_直播连麦过程中回声回音解决方式
  3. python安装失败0x80070005_win10下载安装软件时提示“0x80070005-拒绝访问”
  4. 寒霜朋克计算机丢失,寒霜朋克无法进入游戏解决方法 寒霜朋克无法进入游戏怎么办...
  5. 小牛电动车能跑多快、多远?一起来了解一下
  6. Linux进程管理软件supervisord使用心得
  7. PLSQL Developer解决科学计数法
  8. Mac 全局安装 webpack 报错权限不足解决方法
  9. Android 蓝牙 BLE扫描、广播、连接、数据收发源码分析(2)- inquiry扫描周围设备
  10. interactive governor study for android