Минизин c для индекса цикла - PullRequest
0 голосов
/ 13 января 2020

Я пытаюсь создать функцию MiniZin c, которая возвращает значение индекса текущей посещенной строки в матрице, но я не могу понять, как, я довольно новичок в MiniZin c, поэтому Код может содержать некоторые ошибки.

Код будет выглядеть так:

function int: to_Index(array[totVert][4] of int: matrix, int: pid, int: vert, set of int: TOT_VERT) = 
forall(int: i in TOT_VERT) 
   (if matrix[i][0] == pid /\ matrix[i][1] == vert then 
    % here I would return the current value of i);

1 Ответ

0 голосов
/ 13 января 2020

Вот версия, которая может работать, в зависимости от того, как структурированы данные. Основной совет - использовать exists вместо forall, так как вы ищете значение. Обратите внимание, что это полностью не проверено, поскольку нет тестовых данных.

function var int: to_index(array[int,int] of int:matrix, int:pid, int:vert, set of int: TOT_VERT) =
  let {
      var TOT_VERT: ix;
      constraint
      exists(i in TOT_VERT) (
               if matrix[i,0] = pid /\ matrix[i,1] = vert  then
                  ix = i
               endif
            );
     } in ix
;

Примечание: я также исправил синтаксис для matrix.

...