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

发布时间 - 2026-01-11 01:49:57    点击率:

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

运行效果图如下:

棋盘接口

/**
 * 棋盘接口
 * @author Administrator
 *
 */
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 < this.row; i++, j++) { //右下角;
      if (che[i][j] == true) {
        return false;
      }
    }
    for (i = line, j = col; i >= 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 < this.row && j >= 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; i++) {
      if (che.isRow(i) && che.isCol(line,i)) { //ture 为可以摆皇后;
        che.che[line][i] = true; //
        count++; //
        if (count > 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日期与时间操作技巧汇总》、《Java操作DOM节点技巧总结》和《Java缓存操作技巧汇总》

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


# Java  # 循环  # 递归  # 回溯  # 八皇后  # 算法  # Java的递归算法详解  # java递归算法的实例详解  # Java递归实现迷宫游戏  # java递归实现汉诺塔步骤介绍  # Java递归来实现汉诺塔游戏  # 注释详细  # Java使用递归回溯完美解决八皇后的问题  # Java通过递归算法解决迷宫与汉诺塔及八皇后问题  # 操作技巧  # 相关内容  # 感兴趣  # 数据结构  # 给大家  # 更多关于  # 所述  # 是否能  # 程序设计  # 讲述了  # col  # Chessboard  # implements  # isCol  # isRow  # int  # line  # static  # num 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: Laravel如何使用集合(Collections)进行数据处理_Laravel Collection常用方法与技巧  php静态变量怎么调试_php静态变量作用域调试技巧【解答】  如何在搬瓦工VPS快速搭建网站?  iOS中将个别页面强制横屏其他页面竖屏  Laravel全局作用域是什么_Laravel Eloquent Global Scopes应用指南  Laravel怎么连接多个数据库_Laravel多数据库连接配置  Laravel如何使用withoutEvents方法临时禁用模型事件  Zeus浏览器网页版官网入口 宙斯浏览器官网在线通道  Laravel如何记录日志_Laravel Logging系统配置与自定义日志通道  Laravel的Blade指令怎么自定义_创建你自己的Laravel Blade Directives  mc皮肤壁纸制作器,苹果平板怎么设置自己想要的壁纸我的世界?  高端企业智能建站程序:SEO优化与响应式模板定制开发  微信公众帐号开发教程之图文消息全攻略  独立制作一个网站多少钱,建立网站需要花多少钱?  高端建站如何打造兼具美学与转化的品牌官网?  如何在企业微信快速生成手机电脑官网?  Laravel如何发送邮件和通知_Laravel邮件与通知系统发送步骤  Laravel如何正确地在控制器和模型之间分配逻辑_Laravel代码职责分离与架构建议  Laravel怎么实现软删除SoftDeletes_Laravel模型回收站功能与数据恢复【步骤】  Laravel如何使用缓存系统提升性能_Laravel缓存驱动和应用优化方案  Android自定义listview布局实现上拉加载下拉刷新功能  java ZXing生成二维码及条码实例分享  详解Android中Activity的四大启动模式实验简述  网站设计制作书签怎么做,怎样将网页添加到书签/主页书签/桌面?  laravel服务容器和依赖注入怎么理解_laravel服务容器与依赖注入解析  企业在线网站设计制作流程,想建设一个属于自己的企业网站,该如何去做?  Laravel怎么进行数据库事务处理_Laravel DB Facade事务操作确保数据一致性  JavaScript如何实现音频处理_Web Audio API如何工作?  Laravel辅助函数有哪些_Laravel Helpers常用助手函数大全  简单实现jsp分页  想要更高端的建设网站,这些原则一定要坚持!  如何快速搭建高效WAP手机网站吸引移动用户?  Laravel怎么上传文件_Laravel图片上传及存储配置  Laravel Debugbar怎么安装_Laravel调试工具栏配置指南  如何用已有域名快速搭建网站?  美食网站链接制作教程视频,哪个教做美食的网站比较专业点?  JavaScript实现Fly Bird小游戏  Laravel Session怎么存储_Laravel Session驱动配置详解  Laravel怎么实现观察者模式Observer_Laravel模型事件监听与解耦开发【指南】  Laravel如何清理系统缓存命令_Laravel清除路由配置及视图缓存的方法【总结】  node.js报错:Cannot find module &#39;ejs&#39;的解决办法  ,网页ppt怎么弄成自己的ppt?  php结合redis实现高并发下的抢购、秒杀功能的实例  香港服务器WordPress建站指南:SEO优化与高效部署策略  Laravel怎么使用Markdown渲染文档_Laravel将Markdown内容转HTML页面展示【实战】  头像制作网站在线观看,除了站酷,还有哪些比较好的设计网站?  网站制作报价单模板图片,小松挖机官方网站报价?  使用spring连接及操作mongodb3.0实例  Linux系统命令中tree命令详解  Laravel中的withCount方法怎么高效统计关联模型数量