Java语言程序设计基础篇_编程练习题**18.34 (游戏:八皇后问题)

目录

题目:**18.34 (游戏:八皇后问题)

代码示例

 代码解析

输出结果

使用文件 


题目:**18.34 (游戏:八皇后问题)

  八皇后问题是要找到一个解决方案,将一个皇后棋子放到棋盘上的每行中,并且两个皇后棋子之间不能相互攻击。编写个程序,使用递归来解决八皇后问题,并如图18-17显示结果

  • 代码示例

编程练习题18_34EightQueens.java

package chapter_18;import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.image.Image;
import javafx.scene.image.ImageView;
import javafx.scene.layout.Pane;
import javafx.scene.shape.Line;
import javafx.stage.Stage;public class 编程练习题18_34EightQueens extends Application{private static final int SIZE = 8;private int[] queens = new int[SIZE];public static void main(String[] args) {Application.launch(args);}@Overridepublic void start(Stage primaryStage) throws Exception {search(0);ChessBoard board = new ChessBoard();Scene scene = new Scene(board,250,250);primaryStage.setTitle("编程练习题18_34EightQueens");primaryStage.setScene(scene);primaryStage.show();board.paint();}private boolean isValid(int row,int col){for(int i = 1;i <= row;i++) {if(queens[row-i] == col||queens[row-i] == col-i||queens[row-i] == col+i)return false;}return true;}private boolean search(int row) {if(row == SIZE)return true;for(int col = 0;col < SIZE;col++) {queens[row] = col;if(isValid(row, col)&&search(row+1))return true;}return false;}private class ChessBoard extends Pane{Image queenImage = new Image("src/Image/queen03.png");public void paint() {this.getChildren().clear();for(int i = 0;i < SIZE ;i++) {ImageView imageView = new ImageView(queenImage);this.getChildren() .add(imageView);int j = queens[i];imageView.setX(j*getWidth()/SIZE);imageView.setY(i*getHeight()/SIZE);imageView.setFitWidth(getWidth()/SIZE);imageView.setFitHeight(getHeight()/SIZE);}for(int i =1;i <= SIZE;i++) {this.getChildren().add(new Line(0,i*getHeight()/SIZE,getWidth(),i*getHeight()/SIZE));this.getChildren().add(new Line(i*getWidth()/SIZE,0,i*getWidth()/SIZE,getHeight()));}}}
}
  •  代码解析

  1. 类定义与初始化
    • 编程练习题18_34EightQueens 类继承自 Application,是JavaFX应用程序的入口。
    • 定义了一个静态常量 SIZE 表示棋盘大小(8x8)。
    • 定义了一个整型数组 queens 用于存储每一行皇后的列位置。
  2. main 方法
    • 调用 Application.launch(args); 启动JavaFX应用程序。
  3. start 方法
    • 首先调用 search(0); 方法尝试找到一个解决方案(但不直接处理结果,因为此调用只是为了触发搜索)。
    • 创建 ChessBoard 类的实例,该实例将用于绘制棋盘和皇后。
    • 设置JavaFX场景并展示舞台。
    • 调用 board.paint(); 方法绘制棋盘和皇后。
  4. search 方法
    • 使用回溯算法尝试在每一行放置一个皇后,直到所有行都被填满或无法继续放置。
    • 通过 isValid 方法检查放置皇后的位置是否合法。
    • 如果成功找到解决方案(即所有行都被填满),则返回 true
  5. isValid 方法
    • 检查当前位置 (row, col) 是否与之前的任何皇后冲突。
    • 冲突条件包括:同一列、主对角线和副对角线。
  6. ChessBoard 类
    • 继承自 Pane,用于绘制棋盘和皇后。
    • 在 paint 方法中,首先清除之前的子节点(如果有的话)。
    • 然后,根据 queens 数组中的位置,在棋盘上绘制皇后。
    • 绘制棋盘线,包括横线和竖线,以分隔棋盘格子。
  • 输出结果

 

  • 使用文件 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/432041.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

B-树(不是B减树)原理剖析(1)

目录 B树的主要特性&#xff1a; B树的操作&#xff1a; B树的优点&#xff1a; 为什么要发明出B-树&#xff1f; B树的概念和原理剖析 原理图讲解(部分讲解在图中) 初始化结点&#xff1a; 处理数据数量计算(了解) 底层代码实现(加深理解) 前些日子我们学了AVl树&…

MySQL InnoDB undo log生成逻辑分析

引用《InnoDB存储引擎》中有一句话&#xff0c;特别重要&#xff1a; 用户通常对undo有这样的误解&#xff1a;undo用于将数据库物理地恢复到执行语句或事务之前的样子---但事实并非如此。 undo是逻辑日志&#xff0c;因此只是将数据库逻辑地恢复到原来的样子。所有的修改都被…

通信工程学习:什么是NFV网络功能虚拟化

NFV&#xff1a;网络功能虚拟化 NFV&#xff08;Network Function Virtualization&#xff09;&#xff0c;即网络功能虚拟化&#xff0c;是一种通过虚拟化技术实现网络功能的技术手段。它借鉴了x86服务器的架构&#xff0c;将传统的网络硬件设备如路由器、交换机、防火墙、负载…

neo4j:ubuntu环境下的安装与使用

一、neo4j安装 1. 下载安装包 进入网站&#xff1a;https://neo4j.com/deployment-center/#community 在上图中选择下载即可&#xff08;社区版免费&#xff09; 注意&#xff1a;neo4j的版本要和电脑安装的jdk版本对应&#xff0c;jdk版本使用java --version查看&#xff1a;…

华为认证HCIA篇--网络通信基础

大家好呀&#xff01;我是reload。今天来带大家学习一下华为认证ia篇的网络通信基础部分&#xff0c;偏重一些基础的认识和概念性的东西。如果对网络通信熟悉的小伙伴可以选择跳过&#xff0c;如果是新手或小白的话建议还是看一看&#xff0c;先有个印象&#xff0c;好为后续的…

复制他人 CSDN 文章到自己的博客

文章目录 0.前言步骤 0.前言 在复制别人文章发布时&#xff0c;记得表明转载哦 步骤 在需要复制的csdn 文章页面&#xff0c;打开浏览器开发者工具&#xff08;F12&#xff09;Ctrl F 查找"article_content"标签头 右键“Copy”->“Copy element”新建一个 tx…

【Godot4自学手册】第四十八节创建雨粒子效果

今天我们要利用GPU粒子节点玩雨粒子效果&#xff0c;下雨天。 一、添加GPU粒子系统 添加GPUParticles2D节点。选择根节点&#xff0c;单击添加按钮&#xff0c;选择GPUParticles2D&#xff0c;完成添加。 二、修改属性 1.设置粒子数量。 在GPUParticles2D检查器中将Amount设…

速记篇 |TCP/IP五层模型怎么背,OSI七层模型怎么背?

背景 记忆TCP/IP五层模型和OSI七层模型可以通过理解每一层的功能、作用以及它们之间的逻辑关系来进行。下面分别给出这两个模型的记忆方法和要点&#xff1a; TCP/IP五层模型 TCP/IP五层模型是一个简化的模型&#xff0c;从下到上依次为&#xff1a; 1.物理层&#xff08;Physi…

计算机毕业设计之:云中e百货微信小程序设计与实现(源码+文档+定制)

博主介绍&#xff1a; ✌我是阿龙&#xff0c;一名专注于Java技术领域的程序员&#xff0c;全网拥有10W粉丝。作为CSDN特邀作者、博客专家、新星计划导师&#xff0c;我在计算机毕业设计开发方面积累了丰富的经验。同时&#xff0c;我也是掘金、华为云、阿里云、InfoQ等平台…

微信小程序转化为uni-app项目

前言&#xff1a; 之前自己做一个uni-app的项目的时候前端需要实现一个比较复杂的动态tab和swiper切换的功能&#xff0c;但是由于自己前端抠脚的原因没有写出来&#xff0c;然后自己在网上搜索的时候发现了有个微信小程序里面的页面及极其的符合我的需求。那么问题来了我该如何…

『功能项目』QFrameWork拾取道具UGUI【69】

本章项目成果展示 我们打开上一篇68QFrameWork扔到地上UGUI的项目&#xff0c; 本章要做的事情是实现当物品在地上时&#xff0c;点击物品将对应物品转移到道具栏中 制作一个提示UI界面 添加Button组件设置为点击即将父物体隐藏 拖拽到文件夹中在场景中删除 创建脚本&#xf…

springboot实战学习(9)(配置mybatis“驼峰命名“和“下划线命名“自动转换)(postman接口测试统一添加请求头)(获取用户详细信息接口)

接着学习。之前的博客的进度&#xff1a;完成用户模块的注册接口的开发以及注册时的参数合法性校验、也基本完成用户模块的登录接口的主逻辑的基础上、JWT令牌"的组成与使用以及完成了"登录认证"&#xff08;生成与验证JWT令牌&#xff09;具体往回看了解的链接…

python虚拟环境创建使用

环境变量中配置 vi /etc/profile 注意安装完python环境之后要添加以下代码&#xff0c;配置虚拟环境的命令才能正确使用&#xff1a; PATH$PATH:/usr/local/python3 PATH$PATH:/usr/local/python3/bin 创建&#xff1a;virtualenv venv 激活虚拟环境&#xff1a;source ./v…

从预测性维护到智能物流:ARM边缘计算控制器的工业实践

工业4.0时代的到来&#xff0c;边缘计算技术成为连接物理世界与数字世界的桥梁。ARM架构的边缘计算控制器凭借其低功耗、高能效和灵活性等特点&#xff0c;在工业自动化领域展现出巨大潜力。本文将通过几个实际应用案例来探讨ARM边缘计算控制器是如何提升生产线效率和安全性的&…

【数据结构之线性表】有序表的合并(链表篇)

链表有序表的合并 思路图 将链表L1和L2按照顺序合并到L3中&#xff08;注&#xff1a;三个链表都是带头结点的&#xff09; A、要实现有序合并&#xff0c;必须先比较L1,L2两表中结点的大小&#xff0c;这里我们暂时先不讨论&#xff0c;直接根据图中来进行思路整理&#xff…

plt常用函数介绍二

目录 fig.add_subplot()ax.set()plt.legend()plt.subplots_adjust()plt.suptitle()plt.grid() fig.add_subplot() fig.add_subplot() 是 Matplotlib 中 Figure 对象的方法&#xff0c;用于在图形中添加子图&#xff08;subplot&#xff09;。 其语法为&#xff1a; subplot(…

linux网络编程8

24.9.25学习目录 一.原始套接字&#xff08;续&#xff09;1.sendto发送数据原始套接字1.ARP 二.Web编程1.概述2.HTML 一.原始套接字&#xff08;续&#xff09; 混杂模式&#xff1a; 指一台机器的网卡能够接受所有经过它的数据包&#xff0c;不论其目的地址是否是它&#xf…

程序人生:软件测试 非技术性面试题【建议每个测试人观看】

1、自我介绍&#xff1a;三分钟左右 2、为什么从郑州/太原离职&#xff1f; 3、你的职业规划是什么样的&#xff1f; 4、对下一家公司有什么自己的想法吗&#xff1f; 5、你觉得作为一名测试工程师&#xff0c;应该具备什么样的素养&#xff1f; 6、你觉得管理层&#xff…

echart实现渐变色-vue2

let selectData5 [{name: "有功电量",type: "bar",data: data.data.historyKwhList,unit: "MW",itemStyle: {// 使用渐变色color: {type: "linear",x: 0,y: 0,x2: 0,y2: 1,colorStops: [{offset: 0,color: "#04C886",},{of…

市面第一款 C++ 版本的U盘装机软件(即将上线)

市面大部分U盘装机软件&#xff0c;都是采用Au3脚本开发&#xff0c;而且有各种捆绑&#xff0c;闲来无聊&#xff0c;采用Qt C制作一款CU盘装机软件&#xff0c;从此告别Au3脚本&#xff0c;各种炫酷界面随便换&#xff0c;敬请期待 另外两个界面暂时不公布&#xff0c;防止Au…