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 中的广度优先搜索 的相关文章

  • 模拟函数指针

    以下类包含一个应使用回调技术计算积分的方法 package integrals import java lang public class Integrals public static double f1 double x return
  • JFrame 图标在 Ubuntu 12.04 中不显示

    我使用一些图像图标开发了一个 Swing 应用程序 应用程序 jar 文件在 Windows 中按预期工作 但相同的 jar 文件在 Ubuntu 12 04 操作系统上不显示框架的图像图标 我的示例代码 ImageIcon ImageIc
  • 如何从二维数组中仅打印单个列?

    我正在编写这个程序 我必须只打印二维数组的一列 而不是两者 for int i 0 i lt sjf length i for int j 0 j lt sjf i length j System out printf 5d 4s sjf
  • 使用 REST API 实现属性/字段级安全

    我正在为支持多租户授权模型的 REST API 构建概念验证 该模型不仅控制用户可以访问哪些对象 还控制对象中的字段 此模型的目标是确保租户管理员只能修改其租户并且只能查看允许的对象属性 我有一个正在开发的现有代码库 可在以下位置公开获取
  • SpringMVC 和 Hibernate:CannotCreateTransactionException:无法打开 Hibernate 会话进行事务;

    我正在尝试设置并Spring MVC 休眠项目 但它让我发疯 我还会考虑订购 xml 配置文件的建议 我有以下文件 web xml
  • 如何为带有未确定的“?”的Java通用Map添加值值类型?

    我在 JDK 8 示例中看到过这种声明 Map
  • 如何通过双击图标来执行JAVA程序?

    我写了一个java程序 现在我想在没有 IDE Eclipse 等的情况下打开我的控制台 java 应用程序 只需双击桌面上的可执行版本即可 我已将 java 项目导出为 Runnable JAR 文件 但无法打开 当我尝试使用cmd打开应
  • 在 Retrofit 中的 POST 请求中发送空正文

    我的 api 需要一个空的 json 主体 发出帖子请求时 如何在 Retrofit 和 Jackson 中进行设置 我尝试通过null 和空字符串 以及 但无法让它发挥作用 POST my url Call
  • Java setLocation() 事故

    我正处于创建一个程序来操作员工 客户系统的开始阶段 现在我刚刚创建了登录 GUI 但我遇到了一些问题 setLocation 方法 我将其设置为 250 250 但这使我的 GUI 高度变得非常疯狂 如果有人能够解决这个问题 我的代码如下
  • 如何从网上获取源代码?

    我正在尝试从 Web 获取 HTML 源代码 我尝试这样做 u new URL url URLConnection con u openConnection con setRequestProperty User Agent Mozilla
  • 如何用Java捕获音频数据

    我想访问我的麦克风用 Java 录制的音频数据 我该怎么做呢 我的目标是保存录制的音频数据并同时向用户播放 如果您不需要 JMF 中的任何附加功能 我会避免使用它 因为开发已经停止 最后一个版本是 2004 年 它与 Java 6 存在兼容
  • Java检测音频文件(mp3)

    我有这段代码可以读取 mp3 文件 import java io File import java io IOException import javax sound sampled AudioSystem import javax sou
  • 使用 JNDI 添加 LDAP 条目

    我正在尝试使用 JNDI 将条目添加到 LDAP 服务器 我可以成功地从 LDAP 服务器读取条目 但是当我尝试添加新条目时出现错误 我检查了各种方法但都失败了 private String getUserAttribs String se
  • Jlist 自定义渲染器

    我正在尝试添加一个我猜你会称其为列表中每个项目的子列表 我构建了一个自定义渲染器 它提供以下输出 正如你所看到的 有些东西不对劲 我没能找到问题的答案 我猜我需要更改面板布局中的某些内容才能获得正确的结果 但不知道是什么 https i s
  • 使用 testcontainer 作为 Dockerfile 的一部分运行测试

    我的 dockerfile 看起来像这样 FROM maven 3 jdk 11 slim COPY pom xml COPY src src RUN mvn clean install 这意味着构建的一部分是单元测试的执行 一些单元测试使
  • 无法使用 Jsoup HTML 解析器 Java 实现某些功能

    我无法使用 Jsoup Java 库解析以下场景的一些文本 1 This is b My Text b some other b b text as well b b b non empty tag1 b other text 预期输出 s
  • Android 调整图片大小

    我的图像存储在 SD 卡上 每个大小约为 4MB 我想调整每个的大小 而不是将其设置为 ImageView 但我不能使用BitmapFactory decodeFile path 因为异常 java lang OutOfMemoryErro
  • java银行程序帐户ID不上去?

    每次创建银行帐户时 帐户 ID 都应增加 1 但每次我尝试提取 Id 时 我只会得到帐户 ID 为 0 任何建议 因为我完全按照我学习的书中的方式进行操作而且它仍然没有更新 帐户构造函数 public class BankAccount p
  • 将菜单添加到空活动

    我在 Android Studio 中制作了一个 Android 应用程序 并想在其上创建一个选项菜单 我将其创建为一个空活动 现在意识到我最好创建一个空白活动来获取选项菜单 无论如何 是否可以在空活动中创建选项菜单 如果有人能给我指出一个
  • 寻找基于循环固定大小数组的双端队列

    我正在寻找一个Deque其具有以下特点 它有固定的大小 如果我在头 尾添加元素 则另一端的元素会丢失 它是基于数组的 所以我可以在恒定时间内访问随机元素 我可以在前面或末尾添加元素 双端队列 我检查了Deque的实施JCF但我没有找到任何合

随机推荐

  • 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 个图块留为 空白 搜索的重点是通过向上 下 左或右移动 空白 来重新排列图块 最终将图块重新排列成正确的顺序 为了进行此搜索 我创建了一