Ejemplo n.º 1
0
        private void obliczToolStripMenuItem_Click(object sender, EventArgs e)
        {
            var          DR  = DTklienci.Select();
            int          Lp  = 0;
            List <CDesc> Lst = new List <CDesc>();



            foreach (var row in DR)
            {
                string sLP       = row["Lp"].ToString();
                string sNruslugi = row["numeruslugi"].ToString();
                var    DR2       = DTuslugi.Select("Lp = '" + sNruslugi + "'");

                for (int i = 0; i <= DR2.Length - 2; i++)
                {
                    var   rec1 = DR2[i];
                    CDesc el1  = new CDesc();
                    el1.czasusl  = double.Parse(rec1["czas trwania"].ToString());
                    el1.przerwa  = double.Parse(rec1["minOdstep"].ToString()) * 8 * 60;
                    el1.nazwisko = row["Dane Klienta"].ToString();
                    el1.usluga   = rec1["Usluga"].ToString();
                    el1.nast     = Lp + 1;
                    Lst.Add(el1);
                    Lp++;
                }

                var   rec = DR2[DR2.Length - 1];
                CDesc el  = new CDesc();
                el.czasusl  = double.Parse(rec["czas trwania"].ToString());
                el.przerwa  = double.Parse(rec["minOdstep"].ToString()) * 8 * 60;
                el.nazwisko = row["Dane Klienta"].ToString();
                el.usluga   = rec["Usluga"].ToString();
                el.nast     = 0;
                Lst.Add(el);
                Lp++;
            }
            int [] pi = new int[Lp + 2];
            for (int i = 0; i <= Lp; i++)
            {
                pi[i] = i;
            }
            pi[0] = pi[Lp + 1] = 0;
            //pi[3] = 2;
            //pi[2] = 3;

            List <cp>[] Nast = new List <cp> [Lp + 2];
            List <cp>[] Pop  = new List <cp> [Lp + 2];
            et :;
            createGraph(Lp, Lst, pi, out Nast, out Pop);
            int[] C     = new int[Lp + 1];
            int[] S     = new int[Lp + 1];
            int   res   = harm(Lp, Lst, Pop, Nast, C, S);
            int   Cmax0 = cmax(Lp, C);
            int   bps   = 0;
            int   bCmax = 1000000;

            for (int ps = 1; ps < Lp - 1; ps++)
            {
                int sw = pi[ps]; pi[ps] = pi[ps + 1];  pi[ps + 1] = sw;
                createGraph(Lp, Lst, pi, out Nast, out Pop);

                if (harm(Lp, Lst, Pop, Nast, C, S) == 1)
                {
                    int Cmax = cmax(Lp, C);
                    if (Cmax < bCmax)
                    {
                        bCmax = Cmax;
                        bps   = ps;
                    }
                }

                sw = pi[ps]; pi[ps] = pi[ps + 1]; pi[ps + 1] = sw;
            }
            if (bCmax < Cmax0)
            {
                int sw = pi[bps]; pi[bps] = pi[bps + 1]; pi[bps + 1] = sw;
                goto et;
            }
            //----------dotąd na zajęciach
            createGraph(Lp, Lst, pi, out Nast, out Pop);
            harm(Lp, Lst, Pop, Nast, C, S);
            genHarm(pi, Lst, C);
        }
            public Summon(Node Summon, Server.Server server)
            {
                if (Summon.child.Count < 3)
                {
                    return;
                }
                this.server = server;
                var raw_data = Summon["raw_data"];
                var baseInfo = raw_data["base"].Data.Replace(' ', '#');

                Rank = HttpUtil.GetElement(baseInfo, "等级#", "#");

                成长率   = Convert.ToDouble(HttpUtil.GetElement(baseInfo, "成长率#", "#"));
                Name  = raw_data["name"].Data;
                CDesc = Summon["cDesc"].Data;
                变色    = CDesc.Contains("变色");
                var skillInfo = raw_data["skill"].Data.Replace(";", "#r");

                HaveSpecialSkill = !skillInfo.Contains("未觉醒");
                var skillRaw = HttpUtil.GetAllElements(skillInfo, "技能", "#r");

                if (skillInfo.Contains("技能修炼"))
                {
                    修炼 = true;
                    var tmp = HttpUtil.GetElement(skillInfo, "修炼(", ")");
                    修炼参数1 = HttpUtil.GetElementLeft(tmp, "/");
                    修炼参数2 = tmp.Substring(修炼参数1.Length + 1);
                }
                if (skillInfo.Contains("神兽技能格"))
                {
                    神兽 = true;
                }
                Skills = new List <Skill>();
                foreach (var skill in skillRaw)
                {
                    var thisSkill = new Skill(skill);
                    if (thisSkill.Valid)
                    {
                        Skills.Add(thisSkill);
                    }
                }
                if (CDesc.Contains("饰品"))
                {
                    饰品品质 = HttpUtil.GetElement(CDesc, "品质:", "#");
                }
                else
                {
                    饰品品质 = "-1";
                }
                foreach (var rankRule in InvalidRankRule)
                {
                    if (Rank.Contains(rankRule.Key))
                    {
                        return;
                    }
                }
                if (InvalidNameRule.ContainsKey(Name))
                {
                    return;
                }
                foreach (var cDesRule in InvalidcDesRule)
                {
                    if (CDesc.Contains(cDesRule.Key))
                    {
                        return;
                    }
                }
                valid = true;
            }