如何基于java语言实现八皇后问题
这篇文章主要介绍了如何基于java语言实现八皇后问题,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
八皇后问题,在一个8X8的棋盘中,放置八个棋子,每个棋子的上下左右,左上左下,右上右下方向上不得有其他棋子。正确答案为92中,接下来用java语言实现。
代码如下
packageeightQuen;
/**
*八皇后问题
*
*@author83771
*
*/
publicclasseight{
//定义一个数组表示棋盘
publicstaticInteger[][]checkerBoard=newInteger[8][8];
//棋盘副本
publicstaticInteger[][]checkerBoardCopy=newInteger[8][8];
//计数器用于计数有多少种方法
publicstaticIntegerjishu=1;
//定义横竖斜方向上是否有棋子
publicstaticbooleanflag1=true;
publicstaticbooleanflag2=true;
publicstaticbooleanflag3=true;
publicstaticbooleanflag4=true;
//初始化一个棋盘8x8
publicstaticvoidinit(){
for(inti=0;i<8;i++){
for(intj=0;j<8;j++){
System.out.print(0+"");
checkerBoard[i][j]=0;
}
System.out.println();
}
checkerBoardCopy=checkerBoard;
}
//递归测试方法
publicstaticvoidstartTest(introw){
for(intcol=0;col<8;col++){
if(checkCheet(row,col,checkerBoardCopy)==1){
if(row<7){
startTest(++row);
--row;
}
}
//该行重新赋值为0进行下一次判断
checkerBoardCopy[row][col]=0;
}
}
//检查是否危险
//row行
//col列
publicstaticintcheckCheet(introw,intcol,Integer[][]checkerBoardCopy){
flag1=true;
flag2=true;
flag3=true;
flag4=true;
//行方向上是否满足条件
for(inti=0;i<8;i++){
if(checkerBoardCopy[row][i]==1){
flag1=false;
break;
}
}
//列方向上是否满足条件
for(intj=0;j<8;j++){
if(checkerBoardCopy[j][col]==1){
flag2=false;
break;
}
}
//右下方向
for(inti=row,j=col;i<8&j<8;i++,j++){
if(checkerBoardCopy[i][j]==1){
flag3=false;
break;
}
}
//左上方向
for(inti=row,j=col;i>=0&j>=0;i--,j--){
if(checkerBoardCopy[i][j]==1){
flag3=false;
break;
}
}
//左下方向
for(inti=row,j=col;i<8&j>=0;i++,j--){
if(checkerBoardCopy[i][j]==1){
flag4=false;
break;
}
}
//右上方向
for(inti=row,j=col;i>=0&j<8;i--,j++){
if(checkerBoardCopy[i][j]==1){
flag4=false;
break;
}
}
if(flag1&flag2&flag3&flag4){
//若为真增此点的值赋为1
checkerBoardCopy[row][col]=1;
//如果已经判断到最后一行并且最后一行也符合情况打印整个棋盘
if(row==7){
printCheets(checkerBoardCopy);
}
return1;
}
return0;
}
//打印棋盘方法
publicstaticvoidprintCheets(Integer[][]checkerBoardCopy){
for(inti=0;i<8;i++){
for(intj=0;j<8;j++){
System.out.print(checkerBoardCopy[i][j]+"");
}
System.out.println();
}
System.out.println("================="+jishu++);
}
publicstaticvoidmain(String[]args){
init();
startTest(0);
}
}
copy后可直接运行。记一下这次的代码。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。