首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >经典n-Queens在Java中的实现问题

经典n-Queens在Java中的实现问题
EN

Stack Overflow用户
提问于 2010-12-10 18:32:02
回答 3查看 512关注 0票数 1

这是一个家庭作业问题。我正在用Java写一个经典n-Queens问题的解决方案。我的程序看起来像this,但它返回了所有合法女王位置的集合,而不是将它们打印出来。我将queens的位置表示为int[],并使用HashSet<int[]>作为其实现来返回Set<int[]>。(Set在这里是合适的,因为放置的顺序并不重要)。

问题是Java数组不会覆盖hashCode,并且具有相同值的不同数组实例具有不同的哈希码。

我可以编写一个包装类QueensPlacements,它包含一个数组并用Arrays.deepHashCode覆盖hashCode,然后返回Set<QueensPlacement>。然而,它看起来既冗长又不雅。有没有人能提出更好的解决方案?

EN

回答 3

Stack Overflow用户

发布于 2010-12-10 18:39:42

有几个实现Set接口的标准类。您可以使用TreeSet并提供自己的比较器。

票数 2
EN

Stack Overflow用户

发布于 2010-12-10 18:56:41

为什么不使用Set<List<Integer>>

票数 1
EN

Stack Overflow用户

发布于 2010-12-10 19:01:38

我可以编写一个包装类QueensPlacements,它包含一个数组并用Arrays.deepHashCode覆盖hashCode,然后返回Set。然而,它看起来既冗长又不雅。

创建自定义类可能不是一个坏主意。这听起来像是您担心您只是在创建一个仅传递数据的包装器类,但是您确定它没有其他方法可以使其成为解决方案域的完整部分吗?接收放置集的代码用它做什么?放置是否可以提供一些方法来简化接收代码的工作?一个很好的toString()方法,至少可以进行调试?

*编辑:*

还要考虑到,QueensPlacement可以为位置之间的一致排序提供Comparator<QueensPlacement>,这对于概念问题来说并不是严格必要的(对计算机来说并不重要),但可能会使UI更好一些(例如,如果相同的位置集以相同的顺序显示,对用户来说不是更好吗)。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4407916

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档