示例#1
0
        public void ElemKivetel(int ID)
        {
            ButorAlap elem = lista.IDthElem(ID);
            int       minimum1;
            int       minimum2;

            if (elem is NormalButor)
            {
                minimum1 = Math.Min(elem.Szelesseg, elem.Hosszusag);
                minimum2 = Math.Min(Math.Max(elem.Szelesseg, elem.Hosszusag), elem.Magassag);
            }
            else
            {
                minimum1 = elem.Hosszusag;
                minimum2 = elem.Szelesseg;
            }
            int bal  = int.Parse(elem.BalFelsoKoordinata.Split()[0]);
            int jobb = int.Parse(elem.BalFelsoKoordinata.Split()[1]);

            for (int i = bal; i < bal + minimum1; i++)
            {
                for (int j = jobb; j < jobb + minimum2; j++)
                {
                    raktarButorokkal[i, j] = 0;
                }
            }
            elem.BalFelsoKoordinata = "";
        }
示例#2
0
        public void ElejereBeszuras(ButorAlap elem)
        {
            ListaElem uj = new ListaElem();

            uj.tartalom  = elem;
            uj.kovetkezo = fej;
            fej          = uj;
        }
示例#3
0
 public bool getHely(ButorAlap elem, bool elhelyez)
 {
     if (elem is NormalButor)
     {
         int minimum1 = Math.Min(elem.Szelesseg, elem.Hosszusag);
         int minumum2 = Math.Min(Math.Max(elem.Szelesseg, elem.Hosszusag), elem.Magassag);
         return(raktarVegignez(elem, minimum1, minumum2, elhelyez));
     }
     else
     {
         return(raktarVegignez(elem, elem.Hosszusag, elem.Szelesseg, elhelyez));
     }
 }
示例#4
0
        private void Utbanvan(ref int[] lista, ButorAlap elem, Raktar raktar)
        {
            if (elem == null || elem.BalFelsoKoordinata == null)
            {
                throw new NincsARaktarbanException()
                      {
                          HibaUzenet = "[ERR]Nincs benne a raktárban"
                      }
            }
            ;
            int minimum1;
            int minimum2;

            if (elem is NormalButor)
            {
                minimum1 = Math.Min(elem.Szelesseg, elem.Hosszusag);
                minimum2 = Math.Min(Math.Max(elem.Szelesseg, elem.Hosszusag), elem.Magassag);
            }
            else
            {
                minimum1 = elem.Hosszusag;
                minimum2 = elem.Szelesseg;
            }
            int balalsoKoordinata = int.Parse(elem.BalFelsoKoordinata.Split()[0]) + minimum1 + 1;
            int bal  = int.Parse(elem.BalFelsoKoordinata.Split()[1]);
            int jobb = bal + minimum2;
            int db   = 0;

            for (int i = bal; i < jobb; i++)
            {
                for (int j = balalsoKoordinata; j < raktar.raktarButorokkal.GetLength(1); j++)
                {
                    if (!lista.Contains(raktar.raktarButorokkal[j, i]) && raktar.raktarButorokkal[j, i] != elem.ID)
                    {
                        lista[db++] = raktar.raktarButorokkal[j, i];
                    }
                }
            }
            if (elem is AlacsonyButor)
            {
                if ((elem as AlacsonyButor).rajtaLevoButorIDk != "")
                {
                    int rajtadb = (elem as AlacsonyButor).rajtaLevoButorIDk.Count(Char.IsWhiteSpace) + 1;
                    for (int i = 0; i < rajtadb; i++)
                    {
                        lista[db++] = int.Parse((elem as AlacsonyButor).rajtaLevoButorIDk.Split()[i]);
                    }
                }
            }
        }
示例#5
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)
                              };
                    }
                }
            }
        }
示例#6
0
        public void VegereBeszuras(ButorAlap elem)
        {
            ListaElem uj = new ListaElem();

            uj.tartalom  = elem;
            uj.kovetkezo = null;
            if (fej == null)
            {
                fej = uj;
                return;
            }
            else
            {
                ListaElem p = fej;
                while (p.kovetkezo != null)
                {
                    p = p.kovetkezo;
                }
                p.kovetkezo = uj;
                return;
            }
        }
示例#7
0
 private bool raktarVegignez(ButorAlap elem, int meddig1, int meddig2, bool elhelyez)
 {
     for (int i = 0; i < raktarButorokkal.GetLength(0) - meddig1; i++)
     {
         for (int j = 0; j < raktarButorokkal.GetLength(1) - meddig2; j++)
         {
             if (raktarButorokkal[i, j] == 0)
             {
                 bool joHely = HelyEllenorzes(i, j, meddig1, meddig2, 0);
                 if (joHely == true)
                 {
                     if (elhelyez)
                     {
                         Elemelhelyez(meddig1, meddig2, i, j, elem.ID);
                         elem.BalFelsoKoordinata = i.ToString() + " " + j.ToString();
                     }
                     return(true);
                 }
             }
             if (lista.IDthElem(raktarButorokkal[i, j]) is AlacsonyButor)
             {
                 ButorAlap elemseged = lista.IDthElem(raktarButorokkal[i, j]);
                 if (elemseged.Magassag + elem.Magassag < Magassag && (elemseged as AlacsonyButor).rahelyezhetoMegButor)
                 {
                     bool joHely = false;
                     if (elem is NormalButor)
                     {
                         int minimum1 = Math.Min(elem.Szelesseg, elem.Hosszusag);
                         int minumum2 = Math.Min(Math.Max(elem.Szelesseg, elem.Hosszusag), elem.Magassag);
                         joHely = HelyEllenorzes(i, j, meddig1, meddig2, elemseged.ID);
                     }
                     else
                     {
                         joHely = HelyEllenorzes(i, j, meddig1, meddig2, elemseged.ID);
                     }
                     if (joHely == true)
                     {
                         if (elhelyez)
                         {
                             elem.BalFelsoKoordinata = i.ToString() + " " + j.ToString();
                             if (elem is NormalButor)
                             {
                                 (elemseged as AlacsonyButor).osszMagassag        += Math.Max(elem.Magassag, Math.Max(elem.Szelesseg, elem.Hosszusag));
                                 (elemseged as AlacsonyButor).rahelyezhetoMegButor = false;
                                 (elemseged as AlacsonyButor).rajtaLevoButorIDk   += elem.ID.ToString();
                             }
                             if (elem is AlloButor)
                             {
                                 (elemseged as AlacsonyButor).osszMagassag        += elem.Magassag;
                                 (elemseged as AlacsonyButor).rahelyezhetoMegButor = false;
                                 (elemseged as AlacsonyButor).rajtaLevoButorIDk   += elem.ID.ToString();
                             }
                             if (elem is AlacsonyButor)
                             {
                                 (elemseged as AlacsonyButor).osszMagassag      += elem.Magassag;
                                 (elemseged as AlacsonyButor).rajtaLevoButorIDk += elem.ID.ToString() + " ";
                             }
                         }
                         return(true);
                     }
                 }
             }
         }
     }
     return(false);
 }