gpt4 book ai didi

java - 二维数组约束 : Sudoku

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:30:21 28 4
gpt4 key购买 nike

我正在尝试解决数独作为家庭作业的约束满足问题。我已经为特定行和列中的所有元素构造了不同的约束。我正在尝试为子区域中的元素构造不同的约束,但我遇到了一些麻烦。

我当前算法背后的总体思路是将子区域(例如 9x9 网格的 3x3 框)中的所有变量添加到列表中,然后置换该列表中的所有值以构造 NotEqualConstraints每个变量之间。下面的代码适用于 NxN 网格的第一个子区域,但我不确定我应该如何更改它以遍历整个网格的其余部分。

int incSize = (int)Math.sqrt(svars.length);

ArrayList<Variable> subBox = new ArrayList<Variable>();

for (int ind = 0; ind < incSize; ind++) {
for (int ind2 = 0; ind2 < incSize; ind2++) {
subBox.add(svars[ind][ind2]);
}
}

for (int i = 0; i < subBox.size(); i++) {
for (int j = i + 1; j < subBox.size(); j++) {
NotEqualConstraint row = new NotEqualConstraint(subBox.get(i), subBox.get(j));
constraints.add(row);
}
}

谁能指导我如何修改代码以命中每个子区域而不仅仅是左上角的正确方向?

编辑:我也愿意尝试任何可行的算法,没有必要将所有值添加到每个子区域的 ArrayList。如果您看到更好的方法,请分享见解

最佳答案

对于那些感兴趣的人,这是我想出的工作解决方案:

for (int ofs = 0; ofs < svars.length; ofs++) {
int col = (ofs % incSize) * incSize;
int row = ((int)(ofs / incSize)) * incSize;

ArrayList<Variable> subBox = new ArrayList<Variable>();
for (int ind = row; ind < row+incSize; ind++) {
for (int ind2 = col; ind2 < col+incSize; ind2++) {
subBox.add(svars[ind][ind2]);
}
}
for (int i = 0; i < subBox.size(); i++) {
for (int j = i + 1; j < subBox.size(); j++) {
NotEqualConstraint c = new NotEqualConstraint(subBox.get(i), subBox.get(j));
constraints.add(c);
}
}
}

关于java - 二维数组约束 : Sudoku,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7706908/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com