区域内的排列量?

时间:2018-05-04 12:41:53

标签: java math javafx permutation gridpane

我有以下情况:

  • GridPane分为单元格,所以f.e. 6 x 6 = 36个细胞
  • 需要适应此区域的具体数量的元素,例如: 6
  • 每个元素都有一个区域,f.e。 {3,6,4,5,6,12},以便总面积再次为整体(36)

在这里我的问题是:我如何计算我必须有多少可能的选项

  1. 计算元素的行/列间距(高度/宽度):对于6的区域,不同的选项可以是例如6x1,1x6,3x2和2x3。必要条件是元素需要是正方形或矩形,所以fe不是U或T形占据细胞中的网格。这是我挣扎的地方! 我应该像案件一样做案件吗?我想有更有效的方法可以做到这一点!这将是条件?

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

  3. 我正在编写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 个答案:

答案 0 :(得分:2)

元素数组可以按尺寸递减排序。

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

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

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