MiniZinc中如何检查指定行是否存在于二维数组中
解决二维数组行匹配的约束问题
嘿,我明白你在约束编程(看起来是MiniZinc这类语言)里遇到的问题了——你之前写的constraint [1,2,3] in t;之所以触发类型错误,是因为t是二维数组,而in操作符的语义是检查单个元素是否存在于集合或数组中,没办法直接用来判断一个一维数组是否作为某一行存在于二维数组里。
要实现“检查数组中是否存在与[1,2,3]完全匹配的行”这个需求,你需要遍历二维数组的每一行,然后判断该行是否和目标一维数组完全相等。在MiniZinc里可以用exists量词来实现这个逻辑:
constraint exists(i in 1..3) (t[i, 1..3] == [1, 2, 3]);
代码解释:
exists(i in 1..3):遍历所有行索引i(从1到3)t[i, 1..3]:取出第i行的所有列元素,这会生成一个一维数组== [1,2,3]:判断该行的一维数组是否和目标数组完全匹配
只要存在任意一行满足这个等式,约束就会被满足。
如果你的需求是检查是否存在任意排列的1、2、3(即行是一个不含重复元素的1-3序列),可以把约束改成这样:
constraint exists(i in 1..3) (all_different(t[i, 1..3]));
内容的提问来源于stack exchange,提问作者Monsieur AZERTY
相关产品推荐
相关产品推荐

