我有一个任务,我应该解决一个摩天大楼难题,这个特定的问题。这是一个在 4x4 网格中制作的谜题,其中网格的每个字段在行和列中都有不同的值(类似于数独)。字段内的值向我们显示了在该字段上建造的 skyskcaper 的高度(1-4,4 是最高的建筑物)。网格外的数字是从该方向可见的摩天大楼数量。(例如,从这个方向您只能看到一栋摩天大楼,因为最高的(4 栋建筑)覆盖了其他建筑物的视野 -> 4312 <- 从这个方向您可以看到三栋建筑物(仅覆盖高度为 1 的建筑物))。只给出外面的数字,你必须填写网格。有关游戏规则的更多详细信息:这里
我正在尝试,但我想不出对建筑物秩序的良好约束。我刚刚为行和列中的不同值输入了约束。
problem = Problem()
variables = range(16)
domains = range(1, 5)
problem.addVariables(variables, domains)
for row in range(4):
problem.addConstraint(AllDifferentConstraint(), [row * 4 + i for i in range(4)])
for col in range(4):
problem.addConstraint(AllDifferentConstraint(), [col + 4 * i for i in range(4)])
solution = problem.getSolution()
print(solution)