You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MiniZinc约束中如何正确遍历二维数组解决图着色报错问题

问题根因

报错并非是Adjacency数组的遍历逻辑错误,核心问题是顶点编号与coloring数组的索引范围不匹配:
你定义的coloring数组下标范围为1..N_Vertices(即1~4),但Adjacency中存储的顶点编号为0、1、2、3,当读取到第一个边的顶点0时,尝试访问coloring[0]会触发数组越界,越界操作在布尔约束中会被判定为假,最终导致模型不可满足。

修正方案

有两种可选的修正方式,二选一即可:

方案1:调整coloring数组索引适配0开头的顶点编号

直接修改coloring的下标范围,和你设定的0起始顶点编号对齐,修正后完整代码如下:

int: N_Vertices=4;
int: N_Edges=3;
array[1..N_Edges, 1..2] of int: Adjacency;
Adjacency = [| 0, 1
             | 1, 2
             | 1, 3|];
% 索引范围修改为0~N_Vertices-1,适配顶点编号
array [0..N_Vertices-1] of var int: coloring;

constraint forall(e in 1..N_Edges)(coloring[Adjacency[e, 1]] != coloring[Adjacency[e, 2]]);
constraint forall(c in coloring)(c >= 0);

solve minimize (max(coloring));

方案2:调整顶点编号为1开头适配原有coloring定义

把Adjacency中的顶点编号全部加1,改为1~4的范围,和原有1开头的coloring索引对齐,仅需修改Adjacency赋值部分即可:

Adjacency = [| 1, 2
             | 2, 3
             | 2, 4|];
运行结果

修正后模型可正常求解,你提供的4顶点测试图最少需要2种颜色,可输出合法的染色结果。

内容的提问来源于stack exchange,提问作者Nourless

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 21:54:04