예제 #1
0
        public override void Post()
        {
            switch (Level)
            {
            case PropagateLevel.Normal:
            {
                m_Update = new AllDifferentArrayX(this);

                foreach (Variable var in VarList)
                {
                    var.OnVarIsBoundList.Add(this);
                }
            }
            break;

            case PropagateLevel.High:
            {
                m_Update = new AllDifferentByCountX(this);

                foreach (Variable var in VarList)
                {
                    var.OnVarDomainList.Add(this);
                }
            }
            break;
            }
        }
예제 #2
0
            public override void Update()
            {
                if (AllDifferentArrayX.Update(m_Constraint.IntVarList))
                {
                    m_Constraint.Violate();
                    return;
                }

                UpdateOnDomain(m_Constraint.IntVarList);

                if (UpdateOnCount(m_Constraint.IntVarList))
                {
                    m_Constraint.Violate();
                    return;
                }
            }