26 lines
674 B
MiniZinc
26 lines
674 B
MiniZinc
int: n;
|
|
|
|
enum Men = anon_enum(n);
|
|
enum Women = anon_enum(n);
|
|
|
|
array[Women, Men] of int: rankWomen;
|
|
array[Men, Women] of int: rankMen;
|
|
|
|
array[Men] of var Women: wife;
|
|
array[Women] of var Men: husband;
|
|
|
|
% assignment
|
|
constraint forall (m in Men) (husband[wife[m]]=m);
|
|
constraint forall (w in Women) (wife[husband[w]]=w);
|
|
% ranking
|
|
constraint forall (m in Men, o in Women) (
|
|
rankMen[m,o] < rankMen[m,wife[m]] ->
|
|
rankWomen[o,husband[o]] < rankWomen[o,m] );
|
|
|
|
constraint forall (w in Women, o in Men) (
|
|
rankWomen[w,o] < rankWomen[w,husband[w]] ->
|
|
rankMen[o,wife[o]] < rankMen[o,w] );
|
|
solve satisfy;
|
|
|
|
output ["wives= \(wife)\nhusbands= \(husband)\n"];
|