Java 中的广度优先搜索

2024-04-03

我必须在 Java 中运行广度优先搜索来查找作业。我有一个 5x5 的图块网格(总共 24 个图块 - 1 个图块留为“空白”)。搜索的重点是通过向上、下、左或右移动“空白”来重新排列图块,最终将图块重新排列成正确的顺序。

为了进行此搜索,我创建了一个 Arraylist“队列”。我有一个方法,它获取此数组列表索引 0 处的状态,找到可以遵循的每个合法移动,然后将它们分别添加到数组列表的末尾。

理论上,这种情况会一直持续到最终找到“目标状态”为止。问题是,当我运行搜索时,“队列”数组列表继续变得越来越大。今天我让它运行了几个小时,但仍然没有找到解决方案。

这表明我可能以错误的方式解决了这个问题,并且有更好的方法可以在 Java 中进行广度优先搜索。我知道我的解决方案确实有效(最终),因为当我使用与目标状态没有太大不同的开始状态时,找到正确的路径并不需要太长时间。然而,我已经得到了一个可以使用的起始状态,不幸的是,它与目标状态相去甚远!

任何提示或技巧将不胜感激!


首先,我肯定会使用实际的 Queue 对象而不是 ArrayList。这是 Queue 接口上的 Java API 页面:http://java.sun.com/j2se/1.5.0/docs/api/java/util/Queue.html http://java.sun.com/j2se/1.5.0/docs/api/java/util/Queue.html- 你可以在该页面上看到 Queue 的实现有很多,如果你不知道该选择什么,一个简单的 LinkedList 就可以了。 ArrayList 会对性能造成巨大影响,因为它只能从末尾快速删除,如果从数组中的其他任何位置删除,它必须移动一切下一个(SLOW!)。你会在最后入队并在开始时出队,因此SLOW!

现在,您没有明确提到在完成项目后您正在将项目出队(删除它们),所以我认为您是这样,因为这将是原因之一。

您是否必须专门使用广度优先搜索?如果我没算错的话,有25个! (阶乘)组合,所以这是 15511210043330985984000000 个组合,理论上这意味着如果您正在进行广度优先搜索,您的算法不太可能完成。深度优先搜索不允许吗?如果必须使用广度优先搜索,则使其速度更快的唯一方法是修剪掉不可能导致最佳解决方案的状态。不知道你会怎么做。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Java 中的广度优先搜索 的相关文章

  • Java new Date() 打印

    刚刚学习 Java 我知道这可能听起来很愚蠢 但我不得不问 System out print new Date 我知道参数中的任何内容都会转换为字符串 最终值是 new Date 返回对 Date 对象的引用 那么它是如何打印这个的呢 Mo
  • 为什么 i++ 不是原子的?

    Why is i Java 中不是原子的 为了更深入地了解 Java 我尝试计算线程中循环的执行频率 所以我用了一个 private static int total 0 在主课中 我有两个线程 主题 1 打印System out prin
  • 如何在 Play java 中创建数据库线程池并使用该池进行数据库查询

    我目前正在使用 play java 并使用默认线程池进行数据库查询 但了解使用数据库线程池进行数据库查询可以使我的系统更加高效 目前我的代码是 import play libs Akka import scala concurrent Ex
  • Final字段的线程安全

    假设我有一个 JavaBeanUser这是从另一个线程更新的 如下所示 public class A private final User user public A User user this user user public void
  • INSERT..RETURNING 在 JOOQ 中不起作用

    我有一个 MariaDB 数据库 我正在尝试在表中插入一行users 它有一个生成的id我想在插入后得到它 我见过this http www jooq org doc 3 8 manual sql building sql statemen
  • Android MediaExtractor seek() 对 MP3 音频文件的准确性

    我在使用 Android 时无法在eek 上获得合理的准确度MediaExtractor 对于某些文件 例如this one http www archive org download emma solo librivox emma 01
  • Spring Data JPA 应用排序、分页以及 where 子句

    我目前正在使用 Spring JPA 并利用此处所述的排序和分页 如何通过Spring data JPA通过排序和可分页查询数据 https stackoverflow com questions 10527124 how to query
  • 磁模拟

    假设我在 n m 像素的 2D 表面上有 p 个节点 我希望这些节点相互吸引 使得它们相距越远吸引力就越强 但是 如果两个节点之间的距离 比如 d A B 小于某个阈值 比如 k 那么它们就会开始排斥 谁能让我开始编写一些关于如何随时间更新
  • 斯坦福 NLP - 处理文件列表时 OpenIE 内存不足

    我正在尝试使用斯坦福 CoreNLP 中的 OpenIE 工具从多个文件中提取信息 当多个文件 而不是一个 传递到输入时 它会给出内存不足错误 All files have been queued awaiting termination
  • Java TestNG 与跨多个测试的数据驱动测试

    我正在电子商务平台中测试一系列商店 每个商店都有一系列属性 我正在考虑对其进行自动化测试 是否有可能有一个数据提供者在整个测试套件中提供数据 而不仅仅是 TestNG 中的测试 我尝试不使用 testNG xml 文件作为机制 因为这些属性
  • 在两个活动之间传输数据[重复]

    这个问题在这里已经有答案了 我正在尝试在两个不同的活动之间发送和接收数据 我在这个网站上看到了一些其他问题 但没有任何问题涉及保留头等舱的状态 例如 如果我想从 A 类发送一个整数 X 到 B 类 然后对整数 X 进行一些操作 然后将其发送
  • 如何在 javadoc 中使用“<”和“>”而不进行格式化?

    如果我写
  • 如何在控制器、服务和存储库模式中使用 DTO

    我正在遵循控制器 服务和存储库模式 我只是想知道 DTO 在哪里出现 控制器应该只接收 DTO 吗 我的理解是您不希望外界了解底层域模型 从领域模型到 DTO 的转换应该发生在控制器层还是服务层 在今天使用 Spring MVC 和交互式
  • AWS 无法从 START_OBJECT 中反序列化 java.lang.String 实例

    我创建了一个 Lambda 函数 我想在 API 网关的帮助下通过 URL 访问它 我已经把一切都设置好了 我还创建了一个application jsonAPI Gateway 中的正文映射模板如下所示 input input params
  • Java执行器服务线程池[关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 如果我使用 Executor 框架在
  • Android 中麦克风的后台访问

    是否可以通过 Android 手机上的后台应用程序 服务 持续监控麦克风 我想做的一些想法 不断聆听背景中的声音信号 收到 有趣的 音频信号后 执行一些网络操作 如果前台应用程序需要的话 后台应用程序必须能够智能地放弃对麦克风的访问 除非可
  • 如何在桌面浏览器上使用 webdriver 移动网络

    我正在使用 selenium webdriver 进行 AUT 被测应用程序 的功能测试自动化 AUT 是响应式网络 我几乎完成了桌面浏览器的不同测试用例 现在 相同的测试用例也适用于移动浏览器 因为可以从移动浏览器访问 AUT 由于它是响
  • simpleframework,将空元素反序列化为空字符串而不是 null

    我使用简单框架 http simple sourceforge net http simple sourceforge net 在一个项目中满足我的序列化 反序列化需求 但在处理空 空字符串值时它不能按预期工作 好吧 至少不是我所期望的 如
  • Firebase 添加新节点

    如何将这些节点放入用户节点中 并创建另一个节点来存储帖子 我的数据库参考 databaseReference child user getUid setValue userInformations 您需要使用以下代码 databaseRef
  • java.lang.IllegalStateException:驱动程序可执行文件的路径必须由 webdriver.chrome.driver 系统属性设置 - Similiar 不回答

    尝试学习 Selenium 我打开了类似的问题 但似乎没有任何帮助 我的代码 package seleniumPractice import org openqa selenium WebDriver import org openqa s

随机推荐

  • TableView 复选标记

    我想在选择字典数据数组时在表格视图中放置复选标记 例如 数组包含 10 个模型名称 它是字典 它包含子模型 我的问题是 当我选择子模型时 模型名称自动获得复选标记 现在我为不同的模型和子模型添加了复选标记 但是我们如何根据子模型添加复选标记
  • jquery 在视口检查器中同时检查多个元素

    我有一个 jQuery 函数来检查元素是否在视口中 如果是 它会添加 animate 类来启动动画并使元素可见 上面的方法有效 但现在 有多个元素 jQuery 仅针对该类的第一个元素blogcard 然后执行addClass animat
  • 证书对 Intranet SSL 有用吗?

    我的任务是开发命令行软件的内联网接口 现在我正在研究安全选项 我们的命令行应用程序已经完成 但我还没有开始编写 Web 界面 我不确切地知道潜在客户的安全要求是什么 尽管我相信ssh对于命令行界面来说通常是可以接受的 考虑到这一点 我请求帮
  • WebSocket 和纯 TCP 之间的根本区别是什么?

    我读过关于WebSockets http en wikipedia org wiki Web Sockets我想知道为什么浏览器不能像任何其他桌面应用程序一样简单地打开简单的 TCP 连接并与服务器通信 为什么可以通过 websocket
  • 如何将 Maven 原型添加到 Github?

    我已经使用 Maven 开发了我的自定义项目 我想将其分享给社区 是否可以将其放在 GitHub 上 以便可以从那里下载 并在 create archetype 命令中使用 谢谢 标记 这篇文章可能会提供一点帮助 http cemerick
  • 使用 NSSM 将 NodeJs 进程作为 Windows 服务启动不起作用

    我看过无数关于如何使用 NSSM 的文章 http nssm cc http nssm cc 启动 NodeJS 进程 所以 我有以下简单的 NodeJS 文件 var http require http http createServer
  • PowerShell 从具有多个属性的 XML 中获取属性值

    以下 XML 文件是使用 PowerShell 2 从 2008 R2 故障转移群集运行 Get ClusterGroup 命令的输出的一个对象节点
  • Spyder3 - AttributeError:“SpyderKernel”对象没有属性“_show_mpl_backend_errors”

    我的 Spyder3 有问题 当我打开它时 控制台上会出现此警告 Python 3 8 5 default Jul 28 2020 12 59 40 Type copyright credits or license for more in
  • 检测 IE11 及其内置内存泄漏何时耗尽内存(1.5GB 可回收池)

    IE11 有一个有据可查的 iframe 内存泄漏问题 在 SPA 中 如果您使用 iframe 内存将增长到大约 1 5GB 之后速度会变慢直至崩溃 我的任务是检测浏览器何时即将崩溃并尽快重新启动页面 该应用程序是嵌入在 ASP NET
  • 保持fork最新

    我想将一些东西提交到 github 存储库 但我 显然 没有任何权利这样做 我对该存储库进行了分叉 提交了更改并提交了拉取请求 现在的问题是 过了一段时间 其他人已经提交了原始存储库 这意味着我的分叉不再是最新的 现在应该如何更新我的 fo
  • 在 Windows 中以编程方式更改自定义鼠标光标?

    我正在尝试将 Windows 光标 默认为 Windows 自定义方案 更改为我的自定义光标 名为 割绳子 有没有办法将所有光标 箭头 忙碌 帮助选择 链接选择 更改为我的 割绳子 如果您想更改默认的鼠标光标主题 您只需在注册表中更改它即可
  • createprocess默认暂停[关闭]

    这个问题不太可能对任何未来的访客有帮助 它只与一个较小的地理区域 一个特定的时间点或一个非常狭窄的情况相关 通常不适用于全世界的互联网受众 为了帮助使这个问题更广泛地适用 访问帮助中心 help reopen questions 我在 dl
  • 如何调整 JavaFX 3D 子场景的大小?

    这段代码 http docs oracle com javase 8 javafx graphics tutorial camera htm CJAHFAHB将创建一个 300x300 大的 3D 场景 当我调整包含窗口 舞台的大小时 视口
  • mui 使用入口点插入作用域影子 DOM 样式时选择未设置样式的下拉选项

    请注意 这是针对 MUI v5 mui material 且NOT使用 v4 material ui core 最终弄清楚如何在使用情感入口点插入作用域阴影 DOM 样式时显示 mui material 样式 请参阅这篇文章如何在React
  • Android M:带有英雄元素的场景转换抛出 java.lang.IllegalStateException

    我有一个场景转换 但遇到了一些问题 带有英雄元素的场景转换抛出层超过最大值 GPU支持的尺寸 https stackoverflow com questions 26626344 scene transition with hero ele
  • 从 SiriKit 中的 INExtension 启动应用程序

    我想使用 SiriKit 开始锻炼 开始锻炼需要从应用程序扩展打开主应用程序 Apple 提供的样板文件INStartWorkoutIntentHandling处理程序是 func handle startWorkout startWork
  • 获取 Play 中当前循环的索引! 2 Scala 模板

    游戏中 1 可以在循环中获取当前索引 代码如下 list items myItems as item li Item item index is item li list Play2 中有类似的功能吗 for item lt myItems
  • 'pathutil' ruby​​ gem 与 jekyll (v3.9.0) 和 ruby​​ (v3.0.0) 兼容吗?

    我的问题 我有一个基于 jekyll 的静态网站 跑步后bundle exec jekyll serve 按照 jekyll 文档的指示 我得到下面的堆栈跟踪 我在堆栈跟踪中为该博客文章文件创建的 Markdown 文件完全是标准语法 我已
  • CollectionView 嵌套在 CollectionView 中

    我见过将集合视图嵌套在表视图中的解决方案 但对于我的应用程序 我需要有 2 个集合视图 因为这样可以更轻松地执行其他操作 所以我们调用根集合视图垂直集合视图仅垂直滚动和嵌套集合视图水平集合视图仅水平滚动 我使用故事板创建了它们 下面你会看到
  • Java 中的广度优先搜索

    我必须在 Java 中运行广度优先搜索来查找作业 我有一个 5x5 的图块网格 总共 24 个图块 1 个图块留为 空白 搜索的重点是通过向上 下 左或右移动 空白 来重新排列图块 最终将图块重新排列成正确的顺序 为了进行此搜索 我创建了一