40 namespace Gecode {
namespace Int {
namespace NValues {
76 vs.add(home, x[
i].val());
87 dis = r.
alloc<
int>(n); n_dis = 0;
91 switch (vs.compare(x[i])) {
114 if (vs.subset(x[
i])) {
126 assert(x.size() > 0);
130 for (
int i=x.
size()-1;
i--; ) {
137 if (static_cast<unsigned int>(x.size()+vs.size()) < s)
138 return x.size() + vs.size();
140 return static_cast<int>(s);
146 for (
int i=x.
size();
i--; ) {
164 if (y.max() == vs.size() + 1) {
167 for (
int i=n_dis;
i--; )
176 for (
int i=x.size(); i--; ) {
187 int* deg = r.
alloc<
int>(x.size());
189 int** ovl_i = r.
alloc<
int*>(x.size());
191 int* n_ovl_i = r.
alloc<
int>(x.size());
195 for (
int i=x.
size();
i--; )
199 int*
m = r.
alloc<
int>(n_dis*(n_dis-1));
200 for (
int i=n_dis;
i--; ) {
202 ovl_i[dis[
i]] =
m; m += n_dis-1;
212 for (
int i=n_dis;
i--; )
219 for (
int i=n_dis; i--; )
235 for (
int i=0;
true; i++)
241 int di = re[
i].
view, dj = j.val();
242 if (!ovl.get(di,dj)) {
244 ovl_i[di][deg[di]++] = dj;
245 ovl_i[dj][deg[dj]++] = di;
248 cur.
set(static_cast<unsigned int>(re[i].view));
251 cur.
clear(static_cast<unsigned int>(re[i].view));
263 for (
int i=n_dis;
i--; ) {
264 assert(deg[dis[
i]] < n_dis);
265 n_ovl_i[dis[
i]] = deg[dis[
i]];
269 int* ind = r.
alloc<
int>(n_dis);
274 int d_min = deg[dis[i_min]];
275 unsigned int s_min = x[dis[i_min]].size();
278 for (
int i=n_dis-1;
i--; )
279 if ((d_min > deg[dis[
i]]) ||
280 ((d_min == deg[dis[i]]) && (s_min > x[dis[i]].
size()))) {
283 s_min = x[dis[
i]].
size();
287 ind[n_ind++] = dis[i_min]; dis[i_min] = dis[--n_dis];
290 for (
int i=n_dis; i--; )
291 if (ovl.get(dis[i],ind[n_ind-1])) {
293 for (
int j=n_ovl_i[dis[i]]; j--; )
294 deg[ovl_i[dis[i]][j]]--;
296 dis[
i] = dis[--n_dis];
303 if (vs.size() + n_ind == y.max()) {
306 for (
int i=n_ind;
i--; )
311 for (
int i=x.size(); i--; ) {
329 if (y.min() == g.
size()) {
331 if (vs.size() + x.size() == g.
size()) {
333 for (
int i=x.
size();
i--; ) {