Java 中的 8 拼图问题2025年3月17日 | 阅读 7 分钟 这个谜题包含了其他 8 个谜题的答案。 玩家会得到一个 3x3 的棋盘,上面有 8 个数字块(每个数字块都有 1 到 8 的数字)以及一个空格。利用空格,按照逻辑顺序排列数字块,使其与最终的排列匹配。分配的空间可以容纳四个相邻的数字块(左、右、上和下)。 一个例子是 ![]() 1. DFS(深度优先搜索)(暴力搜索) 我们可以对这样的状态空间树进行深度优先搜索,它包含了问题的所有可能解,或者从起始状态开始的所有可能状态。 ![]() 8 拼图的状态空间树 在此解决方案中,后续移动不一定总是使我们更接近目标,反而可能使其更远,无论初始状态如何,对状态空间树的搜索都从根节点开始沿着最左边的路径进行。使用这种方法可能永远找不到答案节点。 2. 可以使用广度优先策略来搜索 BFS(暴力搜索)的整个状态空间树。总是能找到距离根节点最近的目标状态。无论起始状态如何,算法仍然执行与 DFS 完全相同的步骤。 3. 第三,分支定界法 使用一个“智能”的排名函数,有时也称为近似成本函数,可以通过避免搜索不包含答案节点的子树来加速单个答案节点的查找。但它执行的是类似 BFS 的搜索,而不是使用回溯技术。 分支定界法本质上包含三种不同类型的节点。
成本函数 搜索树的每个节点 X 都附带一个成本。成本函数可用于确定下一个 E 节点。下一个 E 节点具有最低成本。成本函数的定义是 C(X) = g(X) + h(X),其中 g(X) = 从根节点到当前节点的成本 h(X) = 从 X 到答案节点的成本。 最佳拼图尺寸为 8。基于成本的算法 为了将一个数字块向任何方向移动,我们假设这需要一个单位成本。因此,我们为类似 8 拼图方法之类的算法定义成本函数如下: c(x) = f(x) + h(x),其中 f(x) 是路径中从根到 x 的距离(到目前为止的移动次数) h(x) 是不在正确位置的非空白数字块的数量(错误放置的数字块的数量)。要将状态 x 更改为目标状态,至少需要 h(x) 次移动。 我们有一个算法可以估计 h(x) 的未知值,该算法是可用的。 完整算法 下图显示了通过上述技术从提供的初始配置到最终配置(例如 8 拼图)所采取的路径。您应该意识到,只有成本函数值最低的节点才会被扩展。 ![]() 程序 文件名:PuzzleProblem.java 输出 0 1 2 4 5 8 6 7 3 0 1 2 4 5 8 6 7 3 0 1 2 4 7 5 6 8 3 0 1 2 4 7 5 8 6 3 下一个主题Java 中不相邻元素的最大和 |
给定一个字符串 str,编写一个 Java 程序来打印给定字符串中所有偶数长度的单词。示例 1:输入:t= She sells seashells by the seashore 输出:By Seashore 示例 2:输入:t= To be or not to be, that is the question 输出:To be or to that is question 方法:使用 split() 方法 split() 方法是一个……
阅读 2 分钟
在 Java 中,Collection 是一个框架,提供了接口(Set、List、Queue 等)和类(ArrayList、LinkedList 等)来存储对象的集合。这些类以无序的方式存储数据。有时我们需要以有序的方式排列数据,这是已知的...
阅读 8 分钟
在 Web 世界中,会话是指任何两个系统相互交互的时间长度。这两个系统可以彼此建立点对点或客户端-服务器关系。然而,问题在于,在 HTTP 协议中,状态的...
阅读 6 分钟
Java 中的 CollationElementIterator ious() 方法及示例 java.text.CollationElementIterator 具有 ious() 函数。可以使用 CollationElementIterator 类获取前面的 Collator 元素。该方法返回前一个元素的值并将其迭代器前进到该元素。语法:public int ious() 参数:无参数可...
阅读 3 分钟
在数学中,排列和组合是两个重要的概念。排列是集合元素的各种排列。可以通过一次取一个元素、一次取一些元素和一次取所有元素来制作排列。组合是不同的选择...
5 分钟阅读
锁定框架 Java 中的锁定框架和线程同步机制用于管理对共享资源的并发访问,并确保多线程应用程序中的线程安全。它是一组类和接口,存在于 java.util.concurrent 包中。它提供了一种灵活高效的方式...
阅读 10 分钟
Java 8 为多线程引入了多项新功能和改进,使编写高效、并发的程序更加容易。以下是一些关键功能:Lambda 表达式:Java 8 中最重要的一个新功能是 lambda 表达式,它允许您编写简洁的……
阅读 3 分钟
在 Java 中,交换或替换对象可以通过将一个对象的值赋给另一个对象并反之来实现。可以通过使用临时变量来保存一个对象的值,同时将其与另一个对象的值交换来实现...
5 分钟阅读
“有效数字”问题涉及确定给定的字符串是否代表一个有效的数值。这是软件开发中一个常见的问题,尤其是在解析应该代表数字的输入数据时。问题陈述 给定一个字符串 s,确定它是否代表一个有效数字。有效数字...
阅读 2 分钟
给出三个数字。第一个数字是等比数列的第一项。第二个数字是等比数列的公比,第三个数字是要计算的第 n 项。示例 1:输入 int a1 = 5, // 第一项 int...
阅读 4 分钟
我们请求您订阅我们的新闻通讯以获取最新更新。
我们提供所有技术(如 Java 教程、Android、Java 框架)的教程和面试问题
G-13, 2nd Floor, Sec-3, Noida, UP, 201301, India