【问题标题】:All possible ways getting from [0,0,0] to [30,30,30]从 [0,0,0] 到 [30,30,30] 的所有可能方式
【发布时间】:2015-12-15 20:50:18
【问题描述】:

对于一个部落战争游戏,我想知道如何解决以下问题:从 0 级开始有 3 座建筑物。您可以升级建筑物,将其级别从 0 级增加到 1 级,最多 30 级。

由于您可以独立于其他建筑物的等级升级您的建筑物,因此建筑物等级的组合有 30*30*30...

这些组合的输出将是:

0/0/0  
0/0/1  
0/0/2  
...  
0/0/30  
0/1/0  
[0,1,1]  
...  
0/1/30  
0/2/0  
0/2/1  
...  
0/2/30  
...  
0/30/0  
...  
0/30/30]  
1/0/0  

以此类推,直到 30/30/30...

此输出的代码将是一个简单的循环中循环!

但是:这不是我们想要的!

我想要的是获得这些组合的方法,例如组合 [1,1,1] 有 6 (= !3) 种可能的方式来达到这种组合(“a” = 升级第一栋建筑,“b” = 升级第二栋建筑,“c” = 升级第三栋建筑):

a -> b -> c  
a -> c -> b  
b -> a -> c  
b -> c -> a  
c -> a -> b  
c -> b -> a  

请注意,这 6 种方式都会导致相同的结果——所有建筑物都升级了一次。现在,要让所有建筑都达到 30 级,我必须将每个建筑升级 30 次,这意味着最终我们进行了 30*3 的升级。

到达那里的方法例如是:

a -> a -> a -> ... -> a -> b -> b -> ... -> b -> c -> ... -> c  

我认为我需要的是一个包含 90 个元素的数组,包含 3 个元素(每个 30 次),然后我需要这 90 个元素的所有可能顺序...

我该怎么做?

提前致谢!

M. M.

【问题讨论】:

  • 这还不清楚。你能发布一个想要的输出样本吗?你也尝试过吗?
  • 从写一些代码开始,遇到困难,记录下来,尝试通过在线查找来解决。如果您在这一切之后失败了,请编写一个 MCV 示例并在此处发布。欢迎
  • 这听起来就像一个排列/组合问题。你还没有展示任何你已经尝试过的东西
  • 怎么会只有90次升级?不应该是30*30*30吗?

标签: java permutation


【解决方案1】:

不完全确定您在寻找什么,但是:

// you can store whatever you desire for these buildings
int[][][] buildings = new int[30][30][30]; 

// go through each possible level combination and print it
for(int i = 0; i < 30; i++) {
   for(int j = 0; j < 30; j++) {
      for(int k = 0; k < 30; k++) {
           buildings[i][j][k]; // at this point, do whatever you want with the array
           System.out.println("Building1: " + "i + " Building2: " + j " " + " Building3 " + k);
      }
   }
}

如果您正在寻找的只是可能的关卡方案的打印输出,那么您可以删除 buildings 数组。

【讨论】:

    【解决方案2】:

    如果我理解得很好,并且可以将建筑物从一个级别升级到另一个级别,而其他建筑物没有达到某个级别,那么就有更多的可能性。实际上有 31*31*31 种可能的方式来建造建筑物。

    如果这就是你的意思,那么这里就是简单的嵌套 for 循环:

        for (int a = 0; a <= 30; a++) {
            for (int b = 0; b <= 30; b++) {
                for (int c = 0; c <= 30; c++) {
                    System.out.println("Building A: " + a + " Building B: " + 
                            b + " Building C: " + c);
                }
            }
        }
    

    编辑: 现在我知道你在找什么了。您的问题实际上是图遍历。您想查找从节点 [0,0,0] 到节点 [30, 30, 30] 的所有可能路径。在这种情况下,您必须实现简单的搜索算法。我推荐深度优先搜索或广度优先搜索。链接到他们在维基百科上的页面(你会在那里找到伪代码)

    https://en.wikipedia.org/wiki/Breadth-first_search https://en.wikipedia.org/wiki/Depth-first_search

    希望对你有帮助

    【讨论】:

    • 它应该是变量
    • 我相信建筑从0级开始,可以升级到30级。所以总共有31个级别。
    猜你喜欢
    • 2012-10-09
    • 2014-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-07
    • 2010-11-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多