首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在运行时指定的数组/ ArrayList的维度

在运行时指定的数组/ ArrayList的维度
EN

Stack Overflow用户
提问于 2013-10-23 09:15:07
回答 2查看 231关注 0票数 4

假设我有一个可以在棋盘上下棋的算法-- n-dimensional,使用{1,...,8}^n n-dimensional平方。

该算法本身在n维度上工作没有问题,给定一个n-dimensional数组或用于棋盘表示的ArrayList。问题是要在运行时指定n

有什么优雅的方法来生成和使用这样一个n-dimensional棋盘吗?

我想到的是一个递归函数来创建一个n-dimensional ArrayList,返回一个整数的ArrayList如果n == 1,并返回一个ArrayList of ArrayLists,其中第二组ArrayLists的每个ArrayList都有维n-1

但这看起来一点也不优雅.

编辑

在我发表评论之前,一个似乎已经被删除的答案建议生成一个列表,其中包含8大小的其他列表。如果我在第一个列表中使用多个列表,这可能会奏效,但它将迫使我手动跟踪维度。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-10-23 09:31:24

我认为棋盘上很好的数据结构可以使用Map。这样就可以根据List of n整数索引查找位置:

代码语言:javascript
复制
Map<List<Integer>, BoardCell> chessboard;

BoardCell类可能也希望有对其索引的引用,这样您就可以检查哪些碎片威胁到其他部分,等等:

代码语言:javascript
复制
class BoardCell {
   private final List<Integer> index;
   private final Figure figure;
}

生成棋盘当然是缓慢的(指数渐进的),并且是通过枚举所有可能的板位置来完成的,您可以递归地这样做。

这感觉比List of List of List of etc更优雅。

正如Viliamúr在评论部分中所建议的那样,使用Map数据结构可以只跟踪相关的董事会单元。这种类型的数据结构称为Sparse表示。

票数 2
EN

Stack Overflow用户

发布于 2013-10-23 09:24:13

我不认为这是特别优雅的,但它应该能做到这一点:

代码语言:javascript
复制
List makeBoard(int dim) {
    List res = new ArrayList(8);
    for (int i = 0 ; i != 8 ; i++) {
        if (dim != 1) {
            res.add(makeBoard(dim-1));
        } else {
            res.add(0);
        }
    }
    return res;
}

这样做的目的是递归地生成董事会。当dim1时,向列表中添加8个零;否则,添加8个维度dim-1板。

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

https://stackoverflow.com/questions/19537621

复制
相关文章

相似问题

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