示例#1
0
        public static void OPTIMBTS(int szint, ref bool[] E, bool[,] R, ref bool van, Raktar raktar, ref bool[] OPT, LancoltLista lista)
        {
            int i = -1;

            while (i < 1)
            {
                if (szint == lista.DarabElem(lista) - 1)
                {
                    ;
                }
                i++;
                if (Ft(szint, R[szint, i], raktar, E))
                {
                    if (Fk(szint, R[szint, i], raktar, E, lista))
                    {
                        E[szint] = R[szint, i];
                        if (szint == lista.DarabElem(lista) - 1)
                        {
                            if (!van || (Josag(E) > Josag(OPT)))
                            {
                                for (int j = 0; j < E.Length; j++)
                                {
                                    OPT[j] = E[j];
                                }
                            }
                            van = true;
                        }
                        else
                        {
                            OPTIMBTS(szint + 1, ref E, R, ref van, raktar, ref OPT, lista);
                        }
                    }
                }
            }
        }
示例#2
0
        public void OsszesButorElhelyezeseARaktarban(bool UjraRendezes)
        {
            bool van             = false;
            int  butorDarabSeged = ButorDarab;

            int[,] raktarButorokkalseged = raktarButorokkal;
            bool[,] R = new bool[ButorDarab, 2];
            for (int i = 0; i < ButorDarab; i++)
            {
                R[i, 0] = true;
                R[i, 1] = false;
            }
            bool[] E = new bool[ButorDarab];
            BTSs.BTS(0, ref E, R, ref van, this);
            if (UjraRendezes)
            {
                Console.WriteLine("\n\nBefer-e(true/false) teljes ujrarendezes utan + annak a butornak az adatai");
                int          i = 0;
                LancoltLista masikRaktarbaKuldesButorok = new LancoltLista();
                foreach (bool item in E)
                {
                    Console.Write(item + " ");
                    Console.WriteLine(lista.NthElem(i));
                    if (!item)
                    {
                        masikRaktarbaKuldesButorok.VegereBeszuras(lista.NthElem(i));
                    }
                    i++;
                }
                if (masikRaktarbaKuldesButorok.DarabElem(masikRaktarbaKuldesButorok) != 0)
                {
                    for (int j = 0; j < masikRaktarbaKuldesButorok.DarabElem(masikRaktarbaKuldesButorok); j++)
                    {
                        lista.KitorolListabol(masikRaktarbaKuldesButorok.NthElem(j).ID, lista);
                    }
                    throw new NincsTobbHelyButornakTeljesRendezesUtanException()
                          {
                              HibaUzenet = "[ERR]Butor(ok)nak nincs hely teljes ujrarendezés után",
                              elemek     = masikRaktarbaKuldesButorok
                          };
                }
            }
            else
            {
                Console.WriteLine("\n\nBefer-e(true/false) + annak a butornak az adatai");
                for (int i = 0; i < ButorDarab; i++)
                {
                    Console.Write(E[i] + " ");
                    Console.WriteLine(lista.NthElem(i));
                }
            }
        }
示例#3
0
        public void ButorKihozatal(int ID, Raktar raktar)
        {
            ButorAlap elem = raktar.lista.IDthElem(ID);

            int[] UtbanVanIDk = new int[raktar.ButorDarab - 1];
            Utbanvan(ref UtbanVanIDk, elem, raktar);
            LancoltLista kihozottButorokLista = new LancoltLista();
            int          j = 0;

            while (j < raktar.ButorDarab && UtbanVanIDk[j] != 0)
            {
                kihozottButorokLista.VegereBeszuras(raktar.lista.IDthElem(UtbanVanIDk[j]));
                raktar.ElemKivetel(UtbanVanIDk[j++]);
            }
            raktar.ElemKivetel(ID);
            raktar.lista.KitorolListabol(ID, raktar.lista);
            raktar.ButorDarab--;
            int kihozottDb = kihozottButorokLista.DarabElem(kihozottButorokLista);

            if (kihozottDb != 0)
            {
                bool[] OPT = new bool[kihozottDb];
                bool[] E   = new bool[kihozottDb];
                bool[,] R = new bool[kihozottDb, 2];
                for (int i = 0; i < kihozottDb; i++)
                {
                    R[i, 0] = true;
                    R[i, 1] = false;
                }
                bool van = false;
                OptimBTS.OPTIMBTS(0, ref E, R, ref van, this, ref OPT, kihozottButorokLista);
                for (int i = 0; i < kihozottDb; i++)
                {
                    if (OPT[i])
                    {
                        getHely(kihozottButorokLista.NthElem(i), true); // visszarakas a raktarba
                        OnUjHely(kihozottButorokLista.NthElem(i).ID, kihozottButorokLista.NthElem(i).BalFelsoKoordinata);
                    }
                    else
                    {
                        throw new NincsTobbHelyButornakTeljesRendezesElottException()
                              {
                                  HibaUzenet = "[ERR]Egy butornak nem sikerült helyet találni",
                                  elem       = kihozottButorokLista.NthElem(i)
                              };
                    }
                }
            }
        }