Java 区域内的排列数量?

Java 区域内的排列数量?,java,math,javafx,permutation,gridpane,Java,Math,Javafx,Permutation,Gridpane,我有以下情况: 一个网格窗格,被划分为多个单元格,因此f.e.6 x 6=36个单元格 需要融入该区域的具体构件数量,f.e.6 每个元素都有一个面积f.e.{3,6,4,5,6,12},因此总面积也是总面积(36) 我的问题是:我如何计算有多少种可能的选择我必须: 计算元素的行/列跨度(高度/宽度):对于6的区域,不同的选项可以是6x1、1x6、3x2和2x3。。一个必要条件是元素必须是正方形或矩形,因此f.e.不是占据单元格网格的U形或T形。这就是我挣扎的地方! 那么我应该像if cas

我有以下情况:

  • 一个网格窗格,被划分为多个单元格,因此f.e.6 x 6=36个单元格
  • 需要融入该区域的具体构件数量,f.e.6
  • 每个元素都有一个面积f.e.{3,6,4,5,6,12},因此总面积也是总面积(36)
我的问题是:我如何计算有多少种可能的选择我必须:

  • 计算元素的行/列跨度(高度/宽度):对于6的区域,不同的选项可以是6x1、1x6、3x2和2x3。。一个必要条件是元素必须是正方形或矩形,因此f.e.不是占据单元格网格的U形或T形。这就是我挣扎的地方! 那么我应该像if cases那样处理案例吗?我想有一个更有效的方法来做到这一点!条件是什么

  • 将这些元素放置在区域内

  • 我在用java和javafx编程

    到目前为止,我尝试了以下方法来计算跨度/高度/宽度:

        int NumberRow = 6; 
        int NumberColum = 6;
        int columspan;
        int rowspan;
        int area = 6;
        if (area / NumberRow == 1) {
           columspan = 1;
           rowspan = area;}
    
        if  (area/NumberColum== 1) {
          columspan = area;
          rowspan = 1;
        }
        // if area modulo NumberColum or NumberRow == 0 it's an multiple..
        if  (area % NumberColum == 0 ) {
          ???? --> what would make sense here ? 
    
        }
    
    
        VBox v = new VBox();
        v.getChildren().addAll(h1, t, image);
        grid.add(v, colum, row, columspan, rowspan);
    

    元素数组可以按较小的大小排序

    由于必须填充整个区域,因此可以从上到下、从左到右填充

    对于每个区域元素,必须迭代可能的形式;对于6:(1,6),(6,1),(2,3),(3,2):寻找因子对

    带回溯的递归;递归如下所示:

    if (free space == 0)
        print success with placements
        ++solution count
        return;
    for every candidate:
        if (candidate fits here)
            place candidate here
                recurse (candidates without candidate)
            remove candidate here
    

    我不会破坏你面前的美好谜团。

    你可以使用
    int
    作为大小为
    n
    iff
    n%row==0
    的区域的行数。在这种情况下,列数为
    n/行
    。我想您最好的选择是深度优先搜索解决方案(尽早整理无效结果)。嗨,Fabian,谢谢!我更新了问题并添加了一些代码-所以是的,我也考虑了模,但我不知道一旦得到满足条件(模==0)的解决方案,如何计算布局的不同选项(例如3 x 2,2x3,6x1…)。只需使用循环遍历行值的所有可能值并检查它们是否有效。顺便说一句:考虑一下,您可能应该确定“下一个空闲”单元的元素,而不是考虑所有元素的所有位置和尺寸。如果您还不知道深度优先搜索,请查看回溯,不要停留在单一解决方案上。