代码之家  ›  专栏  ›  技术社区  ›  lydiaP

区域内的排列数量?

  •  1
  • lydiaP  · 技术社区  · 7 年前

    我有以下情况:

    • 网格窗格分为多个单元格,因此f.e.6 x 6=36个单元格
    • 需要融入该区域的具体构件数量,f.e.6
    • 每个元素都有一个面积,f.e.{3,6,4,5,6,12},因此总面积也是总面积(36)

    我的问题是:我如何计算 有多少种可能的选择 我必须:

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

    2. 将这些元素放置在区域内

    我正在用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);
    
    1 回复  |  直到 7 年前
        1
  •  2
  •   Joop Eggen    7 年前

    可以按较小的大小对元素数组进行排序。

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

    对于每个区域元素,必须迭代可能的形式;对于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
    

    我不会破坏你面前美好的困惑。