为非图谜题生成具有给定约束的所有可能组合(Java)

为非图谜题生成具有给定约束的所有可能组合(Java),java,algorithm,artificial-intelligence,combinations,constraint-programming,Java,Algorithm,Artificial Intelligence,Combinations,Constraint Programming,我的问题是,当我有一个约束时,我必须为行/列生成所有可能的组合。假设a有一个非图形的拼图,其行大小为40。我有一些限制 B,11,G,5,B,9 我必须遵循一个约束条件: 两块颜色相同的盒子之间总是至少有一个空盒子 不同颜色的盒子之间不必有一个空盒子 图例中数字的顺序对应于方框块的顺序(从左到右,从上到下) 其中字母代表颜色(即B=蓝色),下面是该块的长度。我有一门关于这方面的课。这些规则存储在ArrayList规则中 public class Rule { public int siz

我的问题是,当我有一个约束时,我必须为行/列生成所有可能的组合。假设a有一个非图形的拼图,其行大小为40。我有一些限制

B,11,G,5,B,9
我必须遵循一个约束条件:

  • 两块颜色相同的盒子之间总是至少有一个空盒子
  • 不同颜色的盒子之间不必有一个空盒子
  • 图例中数字的顺序对应于方框块的顺序(从左到右,从上到下)
其中字母代表颜色(即B=蓝色),下面是该块的长度。我有一门关于这方面的课。这些规则存储在ArrayList规则中

public class Rule {

public int size;
public char color;

public Rule(int length, char color){
    this.size = length;
    this.color= color;
}
现在,我想为行/列生成所有有效的组合,以便将它们添加到ArrayList行组合中

for (int i =0 ; i < rowSize ; i++){             
    rowCombinations.add(makeCombinations(some_input));
}
for(inti=0;i
这样makeCombinations函数将返回我的自定义变量类CSPVariable

public class CSPVariable {

public ArrayList<char[]> storage;
public int position;
public boolean Row;

public CSPVariable(int index, boolean Row) {
    this.position = index;
    this.Row = Row;
    this.storage = new ArrayList<>();
}
公共类变量{
公共阵列列表存储;
公共职位;
公共布尔行;
公共变量(整数索引,布尔行){
这个位置=索引;
this.Row=行;
this.storage=new ArrayList();
}

因此,为了重述……给定规则,我想生成所有可能的字母组合,并将其存储到char array storage int CSPVariable类中。

能否提供输入和输出示例输出:输入:前两个数字是维度,然后前40行是行规则,其他是列规则