首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MiniZinc数组声明

MiniZinc数组声明
EN

Stack Overflow用户
提问于 2017-08-13 14:48:09
回答 1查看 1.8K关注 0票数 1

我如何在MiniZinc中声明一个数组,类似于下面的Java代码,其中2D数组的第二维大小对所有对象都不相同?

代码语言:javascript
复制
int numV=5
int[] numActs=new int[numV];
double[][] min=new double[numV][];

for(int i=0;i<numV;i++){
   for(int j=0;j<numActs[i];j++){
      min[i][j]=<some value>;
    }
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-08-14 13:20:59

简而言之: MiniZinc不支持“锯齿”数组,即长度不等的行(没有长度不等的列)。所有行都必须具有相同的长度(与列一样),并且必须使用展平时间中的长度进行声明。

您可以做的是定义最大行长度*最大列长度的数据矩阵(这里称为"m"),并使用一些虚拟值填充较短的行,例如0:

示例:长度不相等的行:

代码语言:javascript
复制
      [1,2,3,4]
      [5,6],
      [7,8,9],
      [10]
      [11,12,13]

相应的MiniZinc声明将是:

代码语言:javascript
复制
     int: rows = 5;
     int: cols = 4;
     array[1..rows,1..cols] of int: m =
           array2d(1..rows,1..cols,
               [
                    1,2,3,4,
                     5,6,0,0,
                     7,8,9,0,
                    10,0,0,0,
                    11,12,13,0,
               ]);

您必须处理这些虚拟值,要么忽略模型中的虚拟值,要么使用包含每行长度的长度数组,例如

代码语言:javascript
复制
  array[1..rows] of int: lengths = [4,2,3,1,3];
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45657867

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档