2017-03-16 69 views
0

我是一個MiniZinc新手,試圖通過使用數組來爲MiniZinc教程中的玩具程序概括着色澳大利亞地圖。爲什麼MiniZinc聲明「意外」?

以下是節目與我2數組聲明:

% Colouring Australia using nc colours 

int: nc = 3; /* number of colours */ 
int: ns = 7; % number of states 

    % I added these 2 lines, and changed nothing else so far 
array[1..ns] of string: names = ["wa","nt","sa","q","nsw","v","t"]; 
var array[1..ns] of 1..nc: colours; 

var 1..nc: wa; % the color assigned to each state, to be calculated 
var 1..nc: nt; 
var 1..nc: sa; 
var 1..nc: q; 
var 1..nc: nsw; 
var 1..nc: v; 
var 1..nc: t; 

constraint wa != nt; % adjacent states 
constraint wa != sa; 
constraint nt != sa; 
constraint nt != q; 
constraint sa != q; 
constraint sa != nsw; 
constraint sa != v; 
constraint q != nsw; 
constraint nsw != v; 

solve satisfy; 

第一個數組聲明是由無投訴編譯器所接受。 第二個數組語句給出了語法錯誤消息:「意外數組」,但沒有抱怨語法本身。

陳述的順序應該是不相關的,所以它不可能是這樣的。 用int替換1..nc仍然給出錯誤。

是什麼讓它「意外」?爲什麼第一個數組不是意外的?

如何應該我在定義一個決策變量數組?

回答

0

用於聲明決策變量的陣列的語法是

array[1..ns] of var 1..nc: colours; 

即「VAR」時(未之前「陣列」)的域之前。