- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我写了一个解迷宫的程序,应该支持 DFS、BFS、A*、Dijkstra 和贪心算法。无论如何,我选择 PriorityQueue 作为我的前沿数据结构,因为我认为优先级可以像队列、堆栈或优先级队列一样运行,具体取决于比较器的实现。
这就是我实现比较器以将优先级队列变成队列的方式:
/由于优先级队列的“自然排序”在头部的元素最少,而传统的比较器在第一个小于第二个时返回 -1,被黑的比较器总是返回 1,以便当前(last) square 将放在尾部(这应该递归工作)/
public int compare(Square square1, Square square2)
{
return 1;
}
但是,在我进行了 BFS 之后,我的迷宫解决方案并不是最优的。
迷宫从坐标 (35,1) 的右上角开始,我的程序检查左边,然后向上,然后向下,然后是右边的邻居。这是我做的 println:
投票结果 (35,1)
添加 (34,1)
添加 (35,2)
投票结果 (34,1)
添加 (33,1)
添加 (34,2)
投票结果 (35,2)
添加 (35,3)
投票结果 (33,1)
添加 (32,1)
添加 (33,2)
投票结果 (34,2)
添加 (34,3)
轮询 (32,1)
……
BFS (35,3) 中的通知应该在 (32,1) 之前被轮询,因为前者在后者之前被添加到队列中。真正让我感到困惑的是,数据结构的行为就像一个队列——所有新成员都是从后面添加的——直到我添加 (32,1),它被放在队列的头部。
我认为我的比较器应该强制优先队列将新来者放在后面。更让我感到奇怪的是,数据结构在中间从队列变成了栈。
非常感谢前面的你们,抱歉我的英语不好,真挚地,肖恩
最佳答案
您实现 compare
的方式是错误的,并且只有在以您假设的非常具体的方式调用它时才会起作用。但是,您不知道 PriorityQueue
实际上在什么上下文中调用了 compare
。 compare
函数可能会在数据结构中的现有元素而不是新元素上调用,反之亦然。
(即使您确实阅读了源代码并对其进行了跟踪并发现这个特定的实现以某种方式工作,如果您希望您的代码可维护,您也不应该依赖它。至少,您会必须解释它为什么有效,从而让自己做更多的工作。)
您可以只使用某种计数器并将其分配为每个添加项的值,然后根据该值正确实现比较
。
compare
的正确实现可能如下所示:
int compare(Object x, Object y){
return x.getSomeProperty() - y.getSomeProperty();
}
请注意,如果您调换参数的顺序,答案也会随之改变。不,返回的 int 不一定必须来自 {-1, 0, 1}。规范要求 0,或者负整数或正整数。您可以使用任何您想要的符号,只要它是正确的符号即可。
关于Java:由优先队列组成的奇怪队列顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12720293/
我正在使用“laravel/lumen-framework”:“5.7.*” 我有两个中间件,第一个 AuthTokenAuthenticate 应该应用于所有路由,因此它在 bootstrap/ap
当同时播放两个音频时...声音会相互抵消。如何解决这个奇怪的现象? 我有一些代码,其中单击按钮时有音频,并且每隔十秒就有音频(在后台服务中)。我有以下代码来在十秒间隔播放时停止按钮音频,并且工作正常:
我有一个功能可以在我的网站上搜索用户, 我的网站上还有一个面向 friend 的功能。 我有一个查询要在我的网站上搜索正确的用户,并且 我有一个查询可以确定用户的 friend ,他们都按应有的方式工
是否可以对记录使用 GROUP BY? 例如,我有一大堆联系人数据,可能包含也可能不包含所有信息 - 在 CSV 意义上,如果可能看起来像这样: Test User, Address1, Addres
如何在客户端 JavaScript 中创建一个环境,其中与用户界面和 View 相关的任何代码优先于其他代码? 我知道你可以使用 setTimeout([function],0); 将事情推到下一个刻
Jasmine 有没有办法定义测试失败的概率? 例如,现在 500'ing 的服务比不显示在页面上的简单内容更糟糕。 谢谢! 最佳答案 这不是单元或集成测试的工作方式。以太测试是否失败。并且您的套件中
我正在为我参与的一个项目开发一个 API。该 API 将由 Android 应用、iOS 应用和桌面网站使用。几乎所有 API 都只有注册用户才能访问。该 API 允许通过 WSSE 进行身份验证,这
我正在开发一些库并创建了这个有缺陷的代码: //------------------- Gmaps = {}; Gmaps.map = new Gmaps4RailsGoogle(); //there
我有一个使用[NSLocale ISOCountryCodes]获得的国家/地区的NSArray。如何排序此NSArray,以便可以将某些常用国家(地区)放在列表的顶部,同时将其余国家/地区按字母顺序
我正在为注册表编写代码,因为我正在从另一个文件中为电话号码列导入代码,但是当我将该代码放入其中时,您可以看到@include('layouts.phone');它显示为 当我放置@include('l
我刚刚遇到了 javascript 代码 file_upload_started = progress < 100; 我不知道如何阅读它,谷歌也没有真正出现太多。我什至不知道该怎么调用它,所以很难进行
目前,我正在 cppinstitute.org 学习 C 语言认证类(class)。在其中一个测验中,有一个如下的问题来识别输出。 int i = 1,j= 1; int w1,w2; w1 = (i
我想将无符号短值从 MSB 优先转换为 LSB 优先。做了下面的代码,但它不工作。有人可以指出我所做的错误吗 #include using namespace std; int main() {
考虑以下场景:我的应用程序有一些依赖于我自己的 POM 优先 Artifact (使用纯 Maven 构建)和一些依赖于我自己的 list 优先 Artifact (使用 Tycho 构建)。对于 P
拥有它应该是很自然的事情,我想知道是否有来自 TPL DataFlow 库的优先级缓冲区块的现成实现? 最佳答案 似乎实现这一目标的最佳方法是使用专门的 任务调度器 ,而不是实现您自己的 Buffer
我有一个 date 字段,它显示为从今天开始的天数。因此 2055-01-01 和 1950-01-01 将分别显示为正数和负数。现在我希望对这些进行排序,以便非负数按升序排在第一位,然后负数按降序排
我遇到一个问题,我看到我的事件类和悬停类正在 Firebug 中应用,但它没有优先于现有样式。 因此,如果我的元素设置了背景颜色,则事件和悬停背景颜色不会更改元素。 我该如何解决这个问题? 最佳答案
我正在考虑为 Salesforce Outbound Messaging 实现监听器应用程序。 walk through 使用已弃用的 ASMX Web 服务实现它。代码是使用带有/serverInt
对于每个表,EF 都会生成一个部分类,其中所有字段都可以公开访问,例如 public int ID { get; set; } 是否可以将 set 设为私有(private)?然后,我将只允许调用我的
我正在为水电站编写一个数据评估应用程序。我需要从服务器下载数据,该数据就在那里 - 作为 MySQL 表,格式化为 JSON 数组。现在,经过无数个小时的工作,我已经完成了连接到服务器、下载数据并将其
我是一名优秀的程序员,十分优秀!