• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

Java基于循环递归回溯实现八皇后问题算法示例

java 搞代码 4年前 (2022-01-05) 33次浏览 已收录 0个评论

这篇文章主要介绍了Java基于循环递归回溯实现八皇后问题算法,结合具体实例形式分析了java的遍历、递归、回溯等算法实现八皇后问题的具体步骤与相关操作技巧,需要的朋友可以参考下

本文实例讲述了Java基于循环递归回溯实现八皇后问题。分享给大家供大家参考,具体如下:

运行

棋盘接口

 /** * 棋盘接口 * @author Administrator *<a style="color:transparent">来源gao($daima.com搞@代@#码网</a> */ public interface Piece { abstract boolean isRow(int line); abstract boolean isCol(int line,int col); } 

棋盘类:

 /** * 棋盘 * @author Administrator * */ public class Chessboard implements Piece { static boolean[][] che = null; public int row; public int col; private int num=0; public Chessboard (int row,int col){ this.che=new boolean[row][col]; this.row=row; this.col=col; } //当前行是否能放棋子 public boolean isRow(int line){ for (int i = 0; i <this.row; i++) { if (che[i][line] == true) { return false; } } return true; } //棋子边角 public boolean isCol(int line,int col){ int i = 0, j = 0; for (i = line, j = col; i <this.row && j = 0 && j >= 0; i--, j--) { //左上角; if (che[i][j] == true) { return false; } } for (i = line, j = col; i >= 0 && j <this.row; i--, j++) { // 右上角; if (che[i][j] == true) { return false; } } for (i = line, j = col; i = 0; i++, j--) { //左下角; if (che[i][j] == true) { return false; } } return true; } public void pr() {//打印满足条件的摆放方法 num++; System.out.println("第" + num + "种方式"); System.out.print("-------------start-------------"); for (int i = 0; i <this.row; i++) { System.out.println(); for (int j = 0; j <this.row; j++) { if (che[i][j] == true) { System.out.print("Q "); } else { System.out.print(". "); } } } System.out.println(); System.out.println("-------------end-------------"); } } 

皇后类

 /** * 皇后 * @author Administrator * */ public class empress { private Chessboard che=null; private int count=0; private int row=0; public empress(int row,int col){ this.che=new Chessboard(row,col); this.row=row; } //主要的递归实现方法 public void mk(int line) { if (line > this.row-1) return;//超过行则退出 for (int i = 0; i  this.row-1) { che.pr();//摆放皇后8个则打印结果 } mk(line + 1);//递归 che.che[line][i] = false; //回溯 count--; continue; } } return; } } 

启动:

 import java.io.BufferedReader; import java.io.InputStreamReader; import java.util.Scanner; import javax.swing.JOptionPane; public class start { public static void main(String[] args) { String inputrow = JOptionPane.showInputDialog("输入行:"); int row = Integer.parseInt(inputrow); String inputcol = JOptionPane.showInputDialog("输入列:"); int col = Integer.parseInt(inputcol); empress emp=new empress(row,col); emp.mk(0); } } 

更多关于java相关内容感兴趣的读者可查看本站专题:《》、《Java字符与字符串操作技巧总结》、《java日期与时间操作技巧汇总》、《Java操作DOM节点技巧总结》和《Java缓存操作技巧汇总》

希望本文所述对大家java程序设计有所帮助。

以上就是Java基于循环递归回溯实现八皇后问题算法示例的详细内容,更多请关注gaodaima搞代码网其它相关文章!


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:Java基于循环递归回溯实现八皇后问题算法示例

喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址